SWITCH_TO_PROFILE
アプリケーションの関連付けを、指定したプロファイルに切り替えるために使用します。1つのアプリを複数のプロファイルに関連付けることはできません。また、指定したプロファイルが別のアプリにすでに関連付けられていてはなりません。プロファイルの切り替えの通知を登録して、プロファイルの切り替えが完了したことを確認することをお勧めします。指定したプロファイルが存在しない場合、またはアプリケーションにすでに関連付けられている場合、この API は機能しません。
注意: GET_IGNORE_DISABLED_PROFILES API が「true」を返す場合、無効なプロファイルには切り替えることができません。
プロファイルの要約
DataWedge は、プロファイルとプラグインを使用して動作します。プロファイルには、DataWedge と特定のアプリケーションとの連携方法に関する次の情報が含まれます。
- 関連付けられたアプリケーション
- 入力プラグインの構成
- 処理プラグインの構成
- 出力プラグインの構成
DataWedge には、DataWedge の初回実行時に自動的に作成されるデフォルト プロファイルである Profile0 が含まれています。プロファイルを使用すると、各アプリケーションに合わせた DataWedge 構成を割り当てることができます。たとえば、各ユーザー アプリケーションがフォアグラウンドでアクティブなときに、スキャンしたデータを必要な形式で出力するプロファイルを、そのアプリケーションに割り当てることができます。キャプチャされた同一のデータを、各アプリケーションの要件に基づいて、異なる方法で処理するように、DataWedge を構成することができます。
注: 1 つのプロファイルは 1 つ以上のアクティビティまたはアプリに関連付けることができますが、アクティビティは 1 つのプロファイルにのみ関連付けることができます。DataWedge では、プロファイルとアクティビティの関係が 1 対 1 に制限されており、プロファイルは 1 つのアクティビティにのみ関連付けることができます。プロファイルを作成するときは、そのプロファイルはどのアプリケーションにも関連付けられず、アプリに関連付けられるまでアクティブになりません。これにより、関連付けられていない複数のプロファイルを作成できます。この API 機能は、このようなプロファイルをアクティブにするために使用します。
使用方法
次の 2 つのアクティビティを持つアプリケーションを検討します。ActivityA は EAN13 バーコードのスキャンを必要とし、ActivityB は MSR カードデータを必要とします。ProfileA は、EAN13 バーコード用に構成されており、関連付けられていません。ProfileB は、MSR 入力用に構成されており、関連付けられていません。ActivityA が開始されると、ProfileA をアクティブにするために SWITCH_TO_PROFILE が使用されます。同様に、ActivityB が開始されると、ProfileB をアクティブにするために SWITCH_TO_PROFILE が使用されます。
フォアグラウンドで別のアクティビティまたはアプリケーションがアクティブになると、DataWedge は自動的に適切なプロファイル (デフォルト プロファイルまたは関連付けられたプロファイル) に切り替わります。ActivityA (または ActivityB) がフォアグラウンドに戻ると、プロファイルを ProfileA (または ProfileB) に戻すために、SWITCH_TO_PROFILE が使用されます。
たとえば、ProfileA が関連付けられておらず、ProfileB がアクティビティ B に関連付けられている場合、 SWITCH_TO_PROFILE を使用して ProfileA に切り替えると、アクティビティ A がフォアグラウンドにある間はアクティブのままになります。アクティビティ B がフォアグラウンドでアクティブになると、DataWedge は自動的に ProfileB に切り替わります。ActivityA が再開されると、アプリケーションは onResume メソッドで SWITCH_TO_PROFILE を使用して、ProfileA に戻す必要があります。
注意事項
- DataWedge は、アクティビティが一時停止すると自動的にプロファイルを切り替えるため、Zebra では、この API をアクティビティの
onResumeメソッドから呼び出すことを推奨しています。 - プロファイルに切り替えた後、関連付けられていないプロファイルは未割り当てのままとなり、後で他のアプリ/アクティビティで使用することができます。
- 下位互換性を維持するため、DataWedge の自動プロファイル切り替えは、これらの API コマンドの影響を受けません。そのため、これらのコマンドは、関連付けられていないプロファイルおよびアプリケーションに対してのみ機能します。
- DataWedge の自動プロファイル切り替え機能は、1 秒ごとに次のように動作します。
- newProfileId を、現在のフォアグラウンド アクティビティに関連付けられたプロファイル ID に設定します。
- 関連付けられたプロファイルが見つからない場合は、newProfileId を、現在のフォアグラウンド アプリに関連付けられたプロファイル ID に設定します。
- それでも関連付けられたプロファイルが見つからない場合は、newProfileId を、現在のデフォルト プロファイル (Profile0 とは限りません) に設定します。
- newProfileId を currentProfileId と比較します。それらが異なる場合:
- 現在のプロファイルを非アクティブにします
- 新しいプロファイル (newProfileId) をアクティブにします
- currentProfileId を newProfileId に設定します
関数プロトタイプ
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(); };
関連項目:
Zebra Support Central | インテグレータ ガイド、製品マニュアル、ソフトウェア ダウンロードおよびサポート
LaunchPad | Zebra 開発者コミュニティ
インテント | Android 開発者
インテントおよびインテント フィルタ | Android 開発者
Android インテント | チュートリアル