Получить штрих-код в Кордове
У меня есть устройство КПК PE900S, на котором я устанавливаю приложение Ionic, которое должно сканировать штрих-коды с помощью встроенного в устройство лазерного сканера.
Для этого я создал плагин Cordova, класс которого в Main.java сейчас выглядит следующим образом:
public class Scanner extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {
if (action.equals("scan")) {
Intent intentService = new Intent("com.hyipc.core.service.barcode.BarcodeService2D");
intentService.putExtra("KEY_ACTION", "UP");
cordova.getActivity().startService(intentService);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
intentService.putExtra("KEY_ACTION", "DOWN");
cordova.getActivity().startService(intentService);
intentService.putExtra("KEY_ACTION", "TONE=100");
return true;
} else {
return false;
}
}
Этот код запускает сканер и создает звуковой сигнал при успешном сканировании. Проблема в том, что я не знаю, как получить результат (строку штрих-кода), чтобы я мог отправить его обратно в мое приложение Ionic.
У меня есть этот пример Java-кода от производителя, который должен делать то, что я хочу, но я не знаю, как интегрировать его в мое приложение. Какие-нибудь мысли?
package com.example.getbarcode;
import java.security.PublicKey;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
public static final String ACTION_BARCODE_SERVICE_BROADCAST = "action_barcode_broadcast";
private BroadcastReceiver mReceiver = new BarcodeReceiver();
public static final String KEY_BARCODE_STR = "key_barcode_string";
private TextView tvBarcode;
private String strBarcode = "";
private Button btnScan;
public static final String KEY_ACTION = "KEY_ACTION";
public static final String TONE = "TONE=100";
private Intent intentService = new Intent("com.hyipc.core.service.barcode.BarcodeService2D");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvBarcode = (TextView) this.findViewById(R.id.tvBarcode);
btnScan = (Button) this.findViewById(R.id.btnScan);
intentService.putExtra(KEY_ACTION, TONE);
this.startService(intentService);
}
public class BarcodeReceiver extends BroadcastReceiver {
public void onReceive(Context ctx, Intent intent) {
if (intent.getAction().equals(ACTION_BARCODE_SERVICE_BROADCAST)) {
strBarcode = intent.getExtras().getString(KEY_BARCODE_STR);
tvBarcode.setText(strBarcode);
strBarcode = "";
}
}
}
public void doClick(View v){
if (v.equals(btnScan)) {
intentService.putExtra(KEY_ACTION, "UP");
.startService(intentService);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
intentService.putExtra(KEY_ACTION, "DOWN");
this.startService(intentService);
}
}
@Override
protected void onPause() {
super.onPause();
//close barcodePower
this.unregisterReceiver(mReceiver);
}
@Override
protected void onResume() {
super.onResume();
intentService.putExtra(KEY_ACTION, "INIT");
this.startService(intentService);
// register receiver
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_BARCODE_SERVICE_BROADCAST);
this.registerReceiver(mReceiver, filter);
}
}