我们在开发的时候需要获取优博讯PDA的条码扫码内容,根据前人的分享及自己找的一些资料整理示例代码如下,希望能帮助到有需要的人。为了避免刚入门的人无从下手,特增加了附件。

以下是示例,真正在用的时候,建议在app启动之后就开始监听,并通过全局事件来推送给需要的页面,而不是在每个页面都自己去监听,有利于代码的维护和提升性能。全局事件的监听和释放可参考我的另一个帖子:关于uni-app全局事件监听和释放监听的分享

另外优博讯的PDA需要在系统的:设置->扫描->Default->关闭(键盘方式输出) 才能使用广播监听。

onLoad() {
page = this;
this.title = "开始监听!";
var main = plus.android.runtimeMainActivity(); //获取activity
var context = plus.android.importClass('android.content.Context'); //上下文
var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: doReceive
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var Intent = plus.android.importClass('android.content.Intent');
var filter = new IntentFilter();
//针对优博讯安卓PDA-i6300A添加监听,其它优博讯的型号应该一样或类似
filter.addAction("android.intent.ACTION_DECODE_DATA"); //监听扫描
main.registerReceiver(receiver, filter); //注册监听
function doReceive(context, intent) {
//通过intent实例引入intent类,方便以后的‘.’操作
plus.android.importClass(intent);
//条码内容
var barcodeBytes = intent.getByteArrayExtra("barcode");
var barcode = byteToString(barcodeBytes);
//条码长度
var barcodeLength = intent.getIntExtra("length", 0);
//var myArray = new ArrayBuffer(0);
//条码类型
var barcodeTypeBytes = intent.getByteExtra("barcodeType", (0 | 0));
var barcodeType = byteToString(barcodeTypeBytes);
// uni.showModal({
//  content: '条码:' + barcode + 'rn长度:' + barcodeLength + 'rn类型:' + barcodeType,
//  showCancel: false
// });
page.title = barcode;
//console.log(barcode);
//main.unregisterReceiver(receiver);//取消监听
}
function byteToString(arr) {
if (typeof arr === 'string') {
return arr;
}
var str = '',
_arr = arr;
for (var i = 0; i < _arr.length; i++) {
var one = _arr[i].toString(2),
v = one.match(/^1+?(?=0)/);
if (v && one.length == 8) {
var bytesLength = v[0].length;
var store = _arr[i].toString(2).slice(7 - bytesLength);
for (var st = 1; st < bytesLength; st++) {
store += _arr[st + i].toString(2).slice(2);
}
str += String.fromCharCode(parseInt(store, 2));
i += bytesLength - 1;
} else {
str += String.fromCharCode(_arr[i]);
}
}
return str;
}
}

下面是新大陆PDA的扫码方式

    //新大陆 智联天地 N7000R 获取方法
//#ifdef APP-PLUS
//this.title = "开始监听!";
var main = plus.android.runtimeMainActivity(); //获取activity
var context = plus.android.importClass('android.content.Context'); //上下文
var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: doReceive
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var Intent = plus.android.importClass('android.content.Intent');
var filter = new IntentFilter();
filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描
// filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描
main.registerReceiver(receiver, filter); //注册监听
function doReceive(context, intent) {
//通过intent实例引入intent类,方便以后的‘.’操作
plus.android.importClass(intent);
var barcodeBytes1 = intent.getStringExtra("scannerdata");
console.log(page.openCustmerScan);
if (page.openCustmerScan) {
page.cylinderRecovery.customerId = barcodeBytes1
} else {
page.setval(barcodeBytes1)
}
}
//#ifdef APP-PLUS
//this.title = "开始监听!";
var main = plus.android.runtimeMainActivity(); //获取activity
var context = plus.android.importClass('android.content.Context'); //上下文
var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: doReceive
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var Intent = plus.android.importClass('android.content.Intent');
var filter = new IntentFilter();
filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描
// filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描
main.registerReceiver(receiver, filter); //注册监听
function doReceive(context, intent) {
//通过intent实例引入intent类,方便以后的‘.’操作
plus.android.importClass(intent);
var barcodeBytes1 = intent.getStringExtra("scannerdata");
console.log(page.openCustmerScan);
if (page.openCustmerScan) {
page.cylinderRecovery.customerId = barcodeBytes1
} else {
page.setval(barcodeBytes1)
}
}
//#endif
//#endif

问答

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up