#android #barcode-scanner
#Android #сканер штрих-кода
Вопрос:
На самом деле я пытаюсь внедрить библиотеку zebra EMDK в свой еще существующий проект. Я шаг за шагом следовал следующему руководству, и в новом проекте все работало отлично, но когда я попытался использовать библиотеку в своем проекте, я получил следующую ошибку:
2019-03-13 15:24:55.720 4671-4678/it.gabtamagnini.realco E/art: Failed sending reply to debugger: Broken pipe
2019-03-13 15:25:01.239 4671-4671/it.gabtamagnini.realco E/AndroidRuntime: FATAL EXCEPTION: main
Process: it.gabtamagnini.realco, PID: 4671
java.lang.RuntimeException: Unable to start activity ComponentInfo{it.gabtamagnini.realco/it.gabtamagnini.realco.InventarioActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.contentEquals(java.lang.CharSequence)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.contentEquals(java.lang.CharSequence)' on a null object reference
at it.gabtamagnini.realco.InventarioActivity.handleDecodeData(InventarioActivity.java:1160)
at it.gabtamagnini.realco.InventarioActivity.onCreate(InventarioActivity.java:129)
at android.app.Activity.performCreate(Activity.java:6723)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Код, в котором я получаю нулевой указатель:
private void handleDecodeData(Intent i) {
//Check the intent action is for us
if (i.getAction().contentEquals("com.symbol.emdksample.RECVR")) {
//Get the source of the data
String source = i.getStringExtra("com.motorolasolutions.emdk.datawedge.source");
//Check if the data has come from the Barcode scanner
if (source.equalsIgnoreCase("scanner")) {
//Get the data from the intent
String data = i.getStringExtra("com.motorolasolutions.emdk.datawedge.data_string");
//Check that we have received data
if(data != null amp;amp; data.length() > 0)
{
Toast.makeText(InventarioActivity.this,data,Toast.LENGTH_LONG).show();
}
}
}
}
Ответ №1:
это руководство довольно старое — профили сбора данных недавно устарели. Если вы пытаетесь это сделать на более новом устройстве, то я подозреваю, что com.motorolasolutions… Намерения были удалены, поскольку дополнительной строкой в течение некоторого времени была ‘com.symbol.datawedge.data_string.data_string. Я предлагаю прочитать https://developer.zebra.com/community/home/blog/2018/06/03/moving-from-the-emdk-data-capture-profile-to-datawedge это объясняет, что произошло с профилем сбора данных, но если вы ищете известный рабочий образец, то http://www.darryncampbell.co.uk/2017/12/13/tutorial-scan-with-datawedge-intent-output-on-zebra-devices/ должно быть хорошей отправной точкой.
Для наглядности я работаю на Zebra
Комментарии:
1. То есть простым словом EMDK устарел? В качестве устройств у меня здесь TC20, TC200J и MC330M. Можно ли каким-либо образом использовать конфигурацию профиля в DataWedge из EMDK для настройки штрих-кодов, которые должен считывать сканер?
2. На самом деле это работало некоторое время, но после какого-то другого теста эта трансляция намерений просто перестала работать.
3. Привет, нет, извините за путаницу, но EMDK НЕ устарел, только тот аспект EMDK, который позволяет настраивать DataWedge. Обычно вы используете EMDK или DataWedge для управления сканером и получения данных штрих-кода в свое приложение, и если вы используете DataWedge, вы можете настроить его, используя стандартные настройки Android, т. Е. нет необходимости использовать EMDK.