プロファイルの切り替え

DataWedge 11.0

SWITCH_TO_PROFILE

アプリケーションの関連付けを、指定したプロファイルに切り替えるために使用します。指定したプロファイルは、別のアプリケーションに関連付けられていない必要があります。アプリケーションを複数のプロファイルに関連付けることはできません。

注意: GET_IGNORE_DISABLED_PROFILES API が値「true」を返す場合、無効なプロファイルには切り替わりません。

プロファイルの要約

DataWedge は、プロファイルとプラグインに基づいています。プロファイルには、DataWedge が特定のアプリケーションでどのように動作するかに関する情報が含まれます。

プロファイル情報は、以下で構成されています。

  • 関連付けられたアプリケーション
  • 入力プラグインの構成
  • 出力プラグインの構成
  • 処理プラグインの構成

DataWedge には、DataWedge の初回実行時に自動的に作成されるデフォルト プロファイルの Profile0 が含まれています。

プロファイルを使用すると、各アプリケーションに特定の DataWedge 構成を割り当てることができます。たとえば、各ユーザー アプリケーションがフォアグラウンドになっているときに、スキャンしたデータを必要な形式で出力するプロファイルを、そのアプリケーションに割り当てることができます。キャプチャされた同一のデータのセットを、各アプリケーションの要件に基づいて、異なる方法で処理するように、DataWedge を構成することができます。

注意事項

1 つのプロファイルを 1 つ以上のアクティビティまたはアプリに関連付けることができます。ただし、1 つのアクティビティを複数のプロファイルに関連付けることはできません。

使用方法

あるアプリケーションに 2 つのアクティビティがあるとします。ActivityA では、EAN13 バーコードだけをスキャンする必要があります。ActivityB では、MSR カード データだけを必要とします。ProfileB は、EAN13 バーコードだけをスキャンするように構成されており、関連付けられていません。ProfileM は、MSR 入力だけを受け入れるように構成されており、関連付けられていません。ActivityA が開始されると、ProfileB をアクティブにするために SWITCH_TO_PROFILE が使用されます。同様に、ActivityB が開始されると、ProfileM をアクティブにするために SWITCH_TO_PROFILE が使用されます。

別のアクティビティ/アプリがフォアグラウンドになっている場合は、DataWedge の自動プロファイル切り替えによって、適宜、デフォルト プロファイルまたは関連付けられたプロファイルのいずれかに DataWedge プロファイルが設定されます。

ActivityA (または ActivityB) がフォアグラウンドに戻ると、プロファイルを ProfileB (または ProfileM) に戻すために、SWITCH_TO_PROFILE が使用されます。

関数プロトタイプ

Intent i = new Intent();
i.setAction("com.symbol.datawedge.api.ACTION");
i.putExtra("com.symbol.datawedge.api.SWITCH_TO_PROFILE", "<profile name>");

パラメータ

ACTION [String]: "com.symbol.datawedge.api.ACTION"

EXTRA_DATA [String]: "com.symbol.datawedge.api.SWITCH_TO_PROFILE"

<プロファイル名>: アクティブなプロファイルとして設定するプロファイル名 (大文字と小文字を区別)。

結果コード

DataWedge は、アプリにインテント エクストラ (SEND_RESULT および COMMAND_IDENTIFIER) が含まれている場合、次のエラー コードを返し、DataWedge の結果インテント メカニズムを使用してアプリで結果を取得できるようにします。以下のを参照してください。

  • PROFILE_HAS_APP_ASSOCIATION - エラー
  • PROFILE_NOT_FOUND - エラー
  • PROFILE_ALREADY_SET - エラー
  • PROFILE_NAME_EMPTY - エラー
  • DATAWEDGE_DISABLED - エラー

詳細については、結果コード ガイドも参照してください。

コード例

// define action and data strings
String switchToProfile = "com.symbol.datawedge.api.ACTION";
String extraData = "com.symbol.datawedge.api.SWITCH_TO_PROFILE";

public void onResume() {
        super.onResume();

        // create the intent
        Intent i = new Intent();

        // set the action to perform
        i.setAction(switchToProfile);

        // add additional info
        i.putExtra(extraData, "myProfile");

        // send the intent to DataWedge
        this.sendBroadcast(i);
}

結果コードの生成と受信

コマンドおよび構成インテント パラメータは、結果コードを送信するかどうかを決定します (デフォルトでは無効)。SEND_RESULT を使用する場合は、結果コードと元のインテントを照合するために、COMMAND_IDENTIFIER を使用します。こうしたパラメータの使用方法のサンプルを以下に示します。

注: 使用する API に合わせて、この汎用コードを変更します

// send the intent
    Intent i = new Intent();
    i.setAction(ACTION);
    i.putExtra("com.symbol.datawedge.api.CREATE_PROFILE", "Profile1");

// request and identify the result code
    i.putExtra("SEND_RESULT","true");
    i.putExtra("COMMAND_IDENTIFIER","123456789");
    this.sendBroadcast(i);

// register to receive the result
    public void onReceive(Context context, Intent intent){

        String command = intent.getStringExtra("COMMAND");
        String commandidentifier = intent.getStringExtra("COMMAND_IDENTIFIER");
        String result = intent.getStringExtra("RESULT");

        Bundle bundle = new Bundle();
        String resultInfo = "";
        if(intent.hasExtra("RESULT_INFO")){
            bundle = intent.getBundleExtra("RESULT_INFO");
            Set<String> keys = bundle.keySet();
            for (String key: keys) {
                resultInfo += key + ": "+bundle.getString(key) + "\n";
            }
        }

        String text = "Command: "+command+"\n" +
                      "Result: " +result+"\n" +
                      "Result Info: " +resultInfo + "\n" +
                      "CID:"+commandidentifier;

        Toast.makeText(context, text, Toast.LENGTH_LONG).show();

    };

コメント

指定したプロファイルが存在しない場合、またはアプリケーションにすでに関連付けられている場合、この API 関数は無効になります。

DataWedge にはプロファイルとアクティビティの間に 1 対 1 の関係があり、プロファイルは 1 つのアクティビティにのみ関連付けることができます。プロファイルを初めて作成するときは、そのプロファイルはどのアプリケーションにも関連付けられず、また関連付けられるまでアクティブになりません。このため、関連付けられていないプロファイルを複数作成できます。

この API 関数は、このようなプロファイルをアクティブにします。

たとえば、ProfileA が関連付けられておらず、ProfileB がアクティビティ B に関連付けられているとします。アクティビティ A が開始され、SWITCH_TO_PROFILE 関数を使用して ProfileA に切り替えると、アクティビティ A がフォアグラウンドになっている場合、常に ProfileA はアクティブになります。アクティビティ B がフォアグラウンドになると、DataWedge は自動的に ProfileB に切り替わります。

アクティビティ A がフォアグラウンドに戻ると、そのアプリは再度 SWITCH_TO_PROFILE を使用して、ProfileA に切り替える必要があります。これは、アクティビティ A の onResume メソッドで実行されます。

注意事項

  • アクティビティが一時停止するとプロファイルが自動的に切り替わるため、この API 関数をアクティビティの onResume メソッドから呼び出すことをお勧めします。
  • あるプロファイルに切り替えた後、この関連付けられていないプロファイルはアプリ/アクティビティに割り当てられず、その後、別のアプリ/アクティビティで使用できるようになります。
  • 後方互換性を保つために、DataWedge の自動プロファイル切り替えは、上記の API コマンドの影響を受けません。そのため、このコマンドは、関連付けられていないプロファイルおよびアプリでのみ機能します。

DataWedge の自動プロファイル切り替えは、次のように機能します。

毎秒...

  • newProfileId を、現在のフォアグラウンド アクティビティの関連付けられたプロファイル ID に設定します。
  • 関連付けられたプロファイルが見つからない場合は、newProfileId を、現在のフォアグラウンド アプリの関連付けられたプロファイル ID に設定します。
  • 関連付けられたプロファイルが見つからない場合は、newProfileId を、現在のデフォルト プロファイル (Profile0 でない可能性あり) に設定します。
  • newProfileIdcurrentProfileId を照合します。異なる場合:
    • 現在のプロファイルを非アクティブにします
    • 新しいプロファイル (newProfileId) をアクティブにします
    • currentProfileId = newProfileId と設定します

関連項目:

Zebra Support Central | インテグレータ ガイド、製品マニュアル、ソフトウェア ダウンロードおよびサポート

LaunchPad | Zebra 開発者コミュニティ

インテント | Android 開発者

インテントおよびインテント フィルタ | Android 開発者

Android インテント | チュートリアル