インテント結果コード

DataWedge 11.0

概要

DataWedge 6.5 で導入。

インテント結果コードは、DataWedge API コマンドに関するステータス情報を配信し、開発者がデータ フローとビジネス ロジックの関数を判断するのに役立ちます。結果コードは、DataWedge 6.5 で導入された API の一部で実装され、以前存在していた多くの API に追加されています。

結果コードには RESULT_INFO インテント メカニズムを使用してアクセスし、以下のプロトタイプに示されているとおり、アプリにインテント エクストラの SEND_RESULT および COMMAND_IDENTIFIER が含まれている場合は、エラー コードが返されます。結果コードを受信するアプリの登録方法のコードについては、以下の「例」のセクションを参照してください。

関数プロトタイプ

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

// request and identify the result code
i.putExtra("SEND_RESULT","LAST_RESULT"); //Supported values: NONE, LAST_RESULT, COMPLETE_RESULT
i.putExtra("COMMAND_IDENTIFIER","123456789");
this.sendBroadcast(i);

パラメータ

RESULT [String]: 操作の Success/Failure

COMMAND [String]: 受信したインテント コマンドの名前

COMMAND_IDENTIFIER [String]: 結果を特定のコマンドにリンクするためのオプション パラメータ

SEND_RESULT [String]: DataWedge 7.1 以降では、次の値を受け入れます。(DataWedge 7.1 以前のバージョンでは、TRUE と FALSE のみを受け入れます)。

  • NONE: アプリケーションに結果が返されませんでした。(これは、DataWedge 7.1 以前のバージョンでは FALSE と等値です)。
  • LAST_RESULT: 最後に実行されたモジュールの結果情報を送信します。ユーザーが複数のプラグインを送信すると、最後に送信されたプラグインの結果情報が返されます。(これは、DataWedge 7.1 以前のバージョンでは TRUE と等値です)。例: BARCODE、SIMULSCAN、および SERIAL プラグインを順番に送信します。アプリケーションが受信した結果情報は、SERIAL プラグインからのみ結果が返されます。
  • COMPLETE_RESULT: 複数のプラグインが送信された場合、各プラグインの結果情報のリストを返します。

RESULT_INFO [Bundle]: 使用中の API に応じて、次のフィールドのいずれかを含めることができます。

  • PREVIOUS_DEFAULT_PROFILE - 新しいデフォルト プロファイルを設定するときに、以前のデフォルト プロファイルを指定します

  • PREVIOUS_PROFILE - プロファイルの切り替え時や名前変更時に、パラメータに以前のプロファイルを指定します

  • PROFILE_NAME - 常に現在または次のプロファイル名

  • RESULT_CODE - リスト テーブルに表示される可能性のあるいずれかの結果コード

  • SOURCE_PROFILE_NAME - プロファイルの複製時にソース プロファイルを指定します

  • RESULT_CODE - 失敗 (FAILURE) の場合にのみ返されます。使用中の API に応じて、次のフィールドのいずれかを含めることができます。

  • APP_ALREADY_ASSOCIATED - すでに別のプロファイルに関連付けられているアプリを関連付けようとしました

  • BUNDLE_EMPTY - バンドルにデータが含まれていません

  • DATAWEDGE_ALREADY_DISABLED - DataWedge がすでに無効になっているときに、無効にしようとしました

  • DATAWEDGE_ALREADY_ENABLED - DataWedge がすでに有効になっているときに、有効にしようとしました

  • DATAWEDGE_DISABLED - - DataWedge が無効になっているときに、操作を実行しようとしました

  • INPUT_NOT_ENABLED - バーコードまたは SimulScan プラグインが無効になっているときに、データを取得しようとしました

  • OPERATION_NOT_ALLOWED - 保護されたプロファイルの名前変更または削除、あるいはアプリと Profile0 の関連付けが行われようとしました

  • PARAMETER_INVALID - 渡されたパラメータが空、null、または無効でした

  • PLUGIN_NOT_SUPPORTED - DataWedge Intent API でサポートされていないプラグインを構成しようとしました

  • PLUGIN_BUNDLE_INVALID - 渡されたプラグイン パラメータ バンドルが空であるか、情報が不足しています

  • PROFILE_ALREADY_EXISTS - - すでに存在する名前でプロファイルを作成、複製、または名前変更しようとしました

  • PROFILE_ALREADY_SET - デフォルト プロファイルをデフォルト プロファイルとして設定しようとしました

  • PROFILE_DISABLED - 無効になっているプロファイルに対して操作を実行しようとしました

  • PLUGIN_DISABLED_IN_CONFIG - DataWedge UI でバーコード プラグインを手動で無効にしたときに、スキャナを有効または無効にしようとしました

  • PROFILE_HAS_APP_ASSOCIATION - 別のアプリにすでに関連付けられているプロファイルをデフォルトに切り替えるか、またはデフォルトとして設定しようとしました

  • PROFILE_NAME_EMPTY - 空のプロファイル名を構成しようとしました

  • PROFILE_NOT_FOUND - 存在しないプロファイルに対して操作を実行しようとしました

  • SCANNER_ALREADY_DISABLED - すでに無効になっているスキャナを無効にしようとしました

  • SCANNER_ALREADY_ENABLED - すでに有効になっているスキャナを有効にしようとしました

  • SCANNER_DISABLE_FAILED - スキャナの無効化中に例外が発生しました

  • SCANNER_ENABLE_FAILED - スキャナの有効化中に例外が発生しました

  • UNKNOWN - 未確認のエラーが発生しました

コード例

//SENDING THE INTENT
Intent i = new Intent();
i.setAction("com.symbol.datawedge.api.ACTION");
i.putExtra("com.symbol.datawedge.api.RESTORE_CONFIG", "");
this.sendBroadcast (i);

結果コードの生成と受信

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

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

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

// request and identify the result code
i.putExtra("SEND_RESULT","LAST_RESULT"); //Supported values: NONE, LAST_RESULT, COMPLETE_RESULT
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();

};

複数のモジュール (プラグイン、APP_LIST、および Data Capture Plus) の結果コードの生成と受信

public void setConfig() {

    // SetConfig [Start]
    Bundle bMain = new Bundle();

    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bParamsIntent.putString("intent_output_enabled", "true");
    bParamsIntent.putString("intent_action", "com.symbol.dwudiusertokens.udi");
    bParamsIntent.putString("intent_category", "zebra.intent.dwudiusertokens.UDI");
    bParamsIntent.putInt("intent_delivery", 5); //Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "false");
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);

    Bundle bConfigSimulScan = new Bundle();
    Bundle bParamsSimulScan = new Bundle();
    bParamsSimulScan.putString("simulscan_input_enabled", "true");
    bParamsSimulScan.putString("simulscan_input_source", "Imager"); //Supported values: Camera, Imager, Default
    bParamsSimulScan.putString("simulscan_region_separator", "TAB"); //Supported Values:None, TAB, CR, LF, NONE
    bParamsSimulScan.putString("simulscan_log_dir", "/storage/zebra/intent/");
    bParamsSimulScan.putString("simulscan_enable_timestamp", "true");

    Bundle templateParamsBundle = new Bundle();
    templateParamsBundle.putString("dynamic_quantity", "99");
    bParamsSimulScan.putString("simulscan_template", "UserDefinedQuantity.xml"); // Ex:  UserDefinedQuantity.xml, Default - BankCheck.xml, Default - Barcode 1.xml, Default - Barcode 10.xml, Default - Barcode 2.xml, Default - Barcode 4.xml, Default - Barcode 5.xml, Default - BookNumber.xml, Default - DocCap + Optional Barcode.xml, Default - DocCap + Required Barcode.xml, Default - TravelDoc.xml, Default - Unstructured Multi-Line.xml, Default - Unstructured Single Line.xml
    bParamsSimulScan.putBundle("simulscan_template_params",templateParamsBundle);

    bConfigSimulScan.putString("PLUGIN_NAME", "SIMULSCAN");
    bConfigSimulScan.putString("RESET_CONFIG", "false");
    bConfigSimulScan.putBundle("PARAM_LIST", bParamsSimulScan);

    Bundle bConfigBarcode = new Bundle();
    Bundle bParamsBarcode = new Bundle();
    bParamsBarcode.putString("scanner_selection","auto");
    bParamsBarcode.putString("scanner_input_enabled","true");
    bConfigBarcode.putString("PLUGIN_NAME", "BARCODE");
    bConfigBarcode.putString("RESET_CONFIG", "false");
    bConfigBarcode.putBundle("PARAM_LIST", bParamsBarcode);

    Bundle bConfigMSR = new Bundle();
    Bundle bParamsMSR = new Bundle();
    bParamsMSR.putString("msr_input_enabled", "true");
    bConfigMSR.putString("PLUGIN_NAME", "MSR");
    bConfigMSR.putString("RESET_CONFIG", "false");
    bConfigMSR.putBundle("PARAM_LIST", bParamsMSR);

    Bundle bConfigIPOutput = new Bundle();
    Bundle bParamsIPOutput = new Bundle();
    bParamsIPOutput.putString("ip_output_enabled", "true");
    bParamsIPOutput.putString("ip_output_ip_wedge_enabled", "false");
    bParamsIPOutput.putString("ip_output_protocol", "UDP"); //Supported Values: TCP: UDP
    bParamsIPOutput.putString("ip_output_address", "192.168.0.1"); //Supported Values : IP Address format
    bParamsIPOutput.putString("ip_output_port", "55555"); //Supported Values : 1 - 65535

    bConfigIPOutput.putString("PLUGIN_NAME", "IP");
    bConfigIPOutput.putString("RESET_CONFIG", "false");
    bConfigIPOutput.putBundle("PARAM_LIST", bParamsIPOutput);

    Bundle bConfigToken = new Bundle();
    Bundle bParamsToken = new Bundle();

    bParamsToken.putString("send_tokens_option", "BARCODES_TOKENS"); // Supported Values: DISABLED, TOKENS, BARCODES_TOKENS
    bParamsToken.putString("token_separator", "LF"); //Supported Values:None, TAB, CR, LF, NONE
    bParamsToken.putString("multibarcode_separator", "LF"); //Supported Values:None, TAB, CR, LF, NONE

    Bundle tokenOrder_manufacturing_date_original = new Bundle();
    tokenOrder_manufacturing_date_original.putString("name","manufacturing_date_original");
    tokenOrder_manufacturing_date_original.putString("enabled","true");

    Bundle tokenOrder_expiration_date_original = new Bundle();
    tokenOrder_expiration_date_original.putString("name","expiration_date_original");
    tokenOrder_expiration_date_original.putString("enabled","true");

    Bundle tokenOrder_di = new Bundle();
    tokenOrder_di.putString("name","di");
    tokenOrder_di.putString("enabled","true");

    Bundle tokenOrder_lot_number = new Bundle();
    tokenOrder_lot_number.putString("name","lot_number");
    tokenOrder_lot_number.putString("enabled","true");

    Bundle tokenOrder_serial_number = new Bundle();
    tokenOrder_serial_number.putString("name","serial_number");
    tokenOrder_serial_number.putString("enabled","true");

    Bundle tokenOrder_mpho_lot_number = new Bundle();
    tokenOrder_mpho_lot_number.putString("name","mpho_lot_number");
    tokenOrder_mpho_lot_number.putString("enabled","true");

    Bundle tokenOrder_donation_id = new Bundle();
    tokenOrder_donation_id.putString("name","donation_id");
    tokenOrder_donation_id.putString("enabled","true");

    Bundle tokenOrder_labeler_identification_code = new Bundle();
    tokenOrder_labeler_identification_code.putString("name","labeler_identification_code");
    tokenOrder_labeler_identification_code.putString("enabled","true");

    Bundle tokenOrder_product_or_catalog_number = new Bundle();
    tokenOrder_product_or_catalog_number.putString("name","product_or_catalog_number");
    tokenOrder_product_or_catalog_number.putString("enabled","true");

    Bundle tokenOrder_unit_of_measure_id = new Bundle();
    tokenOrder_unit_of_measure_id.putString("name","unit_of_measure_id");
    tokenOrder_unit_of_measure_id.putString("enabled","true");

    Bundle tokenOrder_quantity = new Bundle();
    tokenOrder_quantity.putString("name","quantity");
    tokenOrder_quantity.putString("enabled","false");

    ArrayList<Bundle> tokenOrderList = new ArrayList<>();
    tokenOrderList.add(tokenOrder_manufacturing_date_original);
    tokenOrderList.add(tokenOrder_expiration_date_original);
    tokenOrderList.add(tokenOrder_lot_number);
    tokenOrderList.add(tokenOrder_di);
    tokenOrderList.add(tokenOrder_serial_number);
    tokenOrderList.add(tokenOrder_mpho_lot_number);
    tokenOrderList.add(tokenOrder_donation_id);
    tokenOrderList.add(tokenOrder_labeler_identification_code);
    tokenOrderList.add(tokenOrder_product_or_catalog_number);
    tokenOrderList.add(tokenOrder_unit_of_measure_id);
    tokenOrderList.add(tokenOrder_quantity);

    bParamsToken.putParcelableArrayList("token_order", tokenOrderList);

    bConfigToken.putString("PLUGIN_NAME", "TOKEN");
    bConfigToken.putString("OUTPUT_PLUGIN_NAME","IP");
    bConfigToken.putString("RESET_CONFIG", "true");
    bConfigToken.putBundle("PARAM_LIST", bParamsToken);

    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();
    bundlePluginConfig.add(bConfigIntent);
    bundlePluginConfig.add(bConfigBarcode);
    bundlePluginConfig.add(bConfigSimulScan);
    bundlePluginConfig.add(bConfigMSR);
    bundlePluginConfig.add(bConfigIPOutput);
    bundlePluginConfig.add(bConfigToken);

    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);

    //AppList[Start]
    Bundle bundleApp1 = new Bundle();
    bundleApp1.putString("PACKAGE_NAME", "com.symbol.emdk.simulscansample1");
    bundleApp1.putStringArray("ACTIVITY_LIST", new String[]{
            "com.symbol.emdk.simulscansample1.DeviceControl",
            "com.symbol.emdk.simulscansample1.MainActivity",
            "com.symbol.emdk.simulscansample1.ResultsActivity",
            "com.symbol.emdk.simulscansample1.ResultsActivity2",
            "com.symbol.emdk.simulscansample1.SettingsFragment1"});

    Bundle bundleApp2 = new Bundle();
    bundleApp2.putString("PACKAGE_NAME", "com.example.intents.datawedgeintent");
    bundleApp2.putStringArray("ACTIVITY_LIST", new String[]{
            "com.example.intents.datawedgeintent.DeviceControl",
            "com.example.intents.datawedgeintent.MainActivity",
            "com.example.intents.datawedgeintent.ResultsActivity",
            "com.example.intents.datawedgeintent.SettingsFragment1"});

    Bundle bundleApp3 = new Bundle();
    bundleApp3.putString("PACKAGE_NAME", "com.symbol.pubudu");
    bundleApp3.putStringArray("ACTIVITY_LIST", new String[]{"*"});

    Bundle bundleApp4 = new Bundle();
    bundleApp4.putString("PACKAGE_NAME", "com.symbol.myzebraapp");
    bundleApp4.putStringArray("ACTIVITY_LIST", new String[]{"*"});

    // ADD APP_LIST BUNDLE(S) INTO THE MAIN BUNDLE
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            bundleApp1
            , bundleApp2
            , bundleApp3
            , bundleApp4
    });

    //AppList [End]

    Bundle bConfigDCP = new Bundle();
    Bundle bParamsDCP = new Bundle();
    bParamsDCP.putString("dcp_input_enabled", "true");
    bParamsDCP.putString("dcp_dock_button_on", "LEFT"); //Supported values: BOTH - Left or Right, LEFT - Left only, RIGHT - Right only
    bParamsDCP.putString("dcp_start_in", "FULLSCREEN"); //Supported Values: FULLSCREEN, BUTTON, BUTTON_ONLY
    bParamsDCP.putString("dcp_highest_pos", "10"); //Supported Values:  0 - 100
    bParamsDCP.putString("dcp_lowest_pos", "20"); //Supported Values: 0 - 100
    bParamsDCP.putString("dcp_drag_detect_time", "501"); //Supported Values: 0 - 1000
    bConfigDCP.putString("RESET_CONFIG", "true");
    bConfigDCP.putBundle("PARAM_LIST", bParamsDCP);

    bMain.putBundle("DCP", bConfigDCP);

    bMain.putString("PROFILE_NAME", "Profile007");
    bMain.putString("PROFILE_ENABLED", "true");
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

    Intent iSetConfig = new Intent();
    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT"); //Supported values: NONE, LAST_RESULT, COMPLETE_RESULT
    iSetConfig.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
    // SetConfig [End]

    this.sendBroadcast(iSetConfig);
}

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        String strFinalResult = "";
        String command = intent.getStringExtra("COMMAND");
        String profileName = intent.getStringExtra("PROFILE_NAME");
        String resultInfo = "";

        if (action.equals("com.symbol.datawedge.api.RESULT_ACTION")) {

            if (intent.hasExtra("RESULT_LIST")) { // returns for COMPLETE_RESULT
                resultInfo += "ProfileName: " + profileName + "\n";
                ArrayList<Bundle> result_list = (ArrayList)intent.getSerializableExtra("RESULT_LIST");
                for (Bundle bundleResult : result_list) {

                    resultInfo +="\n\n";

                    Set<String> keys = bundleResult.keySet();
                    for (String key : keys) {
                        String val = bundleResult.getString(key);
                        if (val == null) {

                            if (bundleResult.getStringArray(key) != null) {
                                val = "";
                                for (String s : bundleResult.getStringArray(key)) {
                                    val += "" + s + "\n";
                                }
                            }
                        }

                        resultInfo += key + ": " + val + "\n";
                    }
                }
            }
            else if (intent.hasExtra("RESULT_INFO")) { // returns for LAST_RESULT
                String result = intent.getStringExtra("RESULT");
                Bundle bundle = intent.getBundleExtra("RESULT_INFO");
                resultInfo += "Result: " + result + "\n";
                Set<String> keys = bundle.keySet();
                for (String key : keys) {
                    String val = bundle.getString(key);
                    if(val == null) {

                        if(bundle.getStringArray(key) != null) {
                            val="";
                            for (String s : bundle.getStringArray(key)) {
                                val += "" + s + "\n";
                            }
                        }
                    }

                    resultInfo += key + ": " + val + "\n";
                }

            }
            if (command != null) {
                if (command.equalsIgnoreCase("com.symbol.datawedge.api.SET_CONFIG")) {
                    Log.d("TAG", "#IntentApp# \n\nSetConfig status received:\nResultInfo: \n" + resultInfo);
                }
            }
        }
    }
};

コメント

  • 結果インテント メカニズムでは、スキャナ入力パラメータとインテント出力パラメータのパラメータ レベルの検証は実行されません。たとえば、接続されていないスキャナのすべてのパラメータをアプリで検証することはできません。ただし、構成内のパラメータ値が有効でない場合、そのプロファイルがロードされると、そのパラメータのデフォルト値が使用されます。

  • DataWedge では、複数のモジュールを受信した場合、次の順序で SET_CONFIG コマンドを実行します。

  1. プラグイン
  2. APP_LIST
  3. DCP (Data Capture Plus)

関連項目:

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

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

インテント | Android 開発者

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

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