【问题标题】:Use Datawedge with flutter将 Datawedge 与颤振一起使用
【发布时间】:2022-05-18 03:31:29
【问题描述】:

我正在尝试在 Zebra android 扫描仪上将 datawedge Intent API 与我的颤振应用程序一起使用。我从a git repository 开始使用 Zebra EMDK API,效果很好。现在我想迁移它(这是 Zebra 推荐的),因为我希望它也可以在手机上使用(如果可能的话)。

我正在尝试按照 this page 的说明将其与 git 存储库中的代码合并,但在我的应用中未检测到扫描事件。

有人已经这样做并且可以帮助我吗?

这是我的MainActivity.java

package com.example.test_datawedge;

import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
// import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import io.flutter.plugin.common.EventChannel;
import io.flutter.plugin.common.EventChannel.EventSink;
import io.flutter.plugin.common.EventChannel.StreamHandler;
import io.flutter.plugins.GeneratedPluginRegistrant;
import java.util.ArrayList;

public class MainActivity extends FlutterActivity {
  private static final String BARCODE_RECEIVED_CHANNEL = "samples.flutter.io/barcodereceived";


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);
    // setContentView(R.layout.activity_main);

    IntentFilter filter = new IntentFilter();
    filter.addCategory(Intent.CATEGORY_DEFAULT);
    filter.addAction(getResources().getString(R.string.activity_intent_filter_action));
    // registerReceiver(myBroadcastReceiver, filter);

        new EventChannel(getFlutterView(), BARCODE_RECEIVED_CHANNEL).setStreamHandler(
            new StreamHandler() {

              private BroadcastReceiver barcodeBroadcastReceiver;

              @Override
              public void onListen(Object arguments, EventSink events) {
                Log.d("FLUTTERDEMO", "EventChannelOnListen");

                barcodeBroadcastReceiver = createBarcodeBroadcastReceiver(events);
                registerReceiver(
                        barcodeBroadcastReceiver, new IntentFilter("readBarcode"));
              }

              @Override
              public void onCancel(Object arguments) {
                Log.d("FLUTTERDEMO", "EventChannelOnCancel");

                unregisterReceiver(barcodeBroadcastReceiver);
                barcodeBroadcastReceiver = null;
              }
            }
    );

  }

//   @Override
//     protected void onDestroy()
//     {
//         super.onDestroy();
//         unregisterReceiver(myBroadcastReceiver);
//     }

    //
    // After registering the broadcast receiver, the next step (below) is to define it.  
    // Here it's done in the MainActivity.java, but also can be handled by a separate class.
    // The logic of extracting the scanned data and displaying it on the screen 
    // is executed in its own method (later in the code). Note the use of the 
    // extra keys are defined in the strings.xml file.  
    //  
    private BroadcastReceiver createBarcodeBroadcastReceiver(final EventSink events) {
        return new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                String action = intent.getAction();

                Log.d("FLUTTERDEMO", "createBarcodeBroadcastReceiver " + action);

                if(action.equals("readBarcode")){
                    String barcode = intent.getStringExtra("barcode");
                    String barcodetype = intent.getStringExtra("barcodetype");
                    Log.d("FLUTTERDEMO", "createBarcodeBroadcastReceiver " + barcode);
                    events.success(barcode);
                }
            }
        };
    }
    //
    // The section below assumes that a UI exists in which to place the data. A production 
    // application would be driving much of the behavior following a scan.
    //
    // private void displayScanResult(Intent initiatingIntent, String howDataReceived)
    // {
    //     String decodedSource = initiatingIntent.getStringExtra(getResources().getString(R.string.datawedge_intent_key_source));
    //     String decodedData = initiatingIntent.getStringExtra(getResources().getString(R.string.datawedge_intent_key_data));
    //     String decodedLabelType = initiatingIntent.getStringExtra(getResources().getString(R.string.datawedge_intent_key_label_type));

    //     final TextView lblScanSource = (TextView) findViewById(R.id.lblScanSource);
    //     final TextView lblScanData = (TextView) findViewById(R.id.lblScanData);
    //     final TextView lblScanLabelType = (TextView) findViewById(R.id.lblScanDecoder);
    //     lblScanSource.setText(decodedSource + " " + howDataReceived);
    //     lblScanData.setText(decodedData);
    //     lblScanLabelType.setText(decodedLabelType);
    // }
}

【问题讨论】:

  • 需要检查的几件事:DataWedge 是否配置为使用适当的操作发送 Intent(看起来您已将操作指定为“readBarcode”;您正在修改以发送 Intent 的配置文件是关联的配置文件使用您的应用程序(或默认配置文件)。我建议首先使用已知的工作示例进行设置 - 我没有示例 Flutter 应用程序,但这个 Java 应用程序至少应该有助于确保您正确配置了 DataWedge:github.com/darryncampbell/DataWedge-Intent-Example-1
  • 好吧,我有更好的东西,在我的 dart 类中触发了一个事件,但它为空。问题实际上来自操作名称:“readBarcode”。我的 Datawedge 配置良好。我现在要尝试解决空事件。感谢您的建议。
  • 太好了,请告诉我进展如何
  • 同样的问题,我使用了错误的名称:String barcode = intent.getStringExtra("barcode"); => 正确的是:String barcode = intent.getStringExtra("com.symbol.datawedge.data_string"); 现在,我可以在移动设备上使用我的应用程序,我将使用其他解决方案用相机扫描。
  • @Adrien 你明白了吗?

标签: flutter datawedge


【解决方案1】:

Zebra EMDK 通过覆盖“onStatus”和“onData”函数来检索数据。

从“onData”中检索您的条形码数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2022-01-15
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2021-04-29
    相关资源
    最近更新 更多