分享到
新浪微博
分享到
朋友圈
分享到
QQ空间
发布日期:2020-05-09 来源: 本站 阅读量(5666)
idata手持终端获取扫描头的扫描信息的方式可以通过引用SDK包(jar)获取也可以通过监听广播(Intent)的模式进行获取。现在主流都是通过广播进行监听获取扫描信息,我们下面讲解的也是广播模式。 首先要引入ScannerInterface.java,这个类帮我们封装实现了一些接口,就是把设置的一些广播直接封装成了接口函数。 然后在我们的MainActivity.java进行调用引用,MainActivity.java的源代码如下: public class MainActivity extends Activity{
private boolean isContinue = false; //连续扫描的标志
TextView tvScanResult;
ScannerInterface scanner;
IntentFilter intentFilter;
BroadcastReceiver scanReceiver;
private static final String RES_ACTION = "android.intent.action.SCANRESULT";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvScanResult = (TextView) this.findViewById(R.id.tv_scan_result);
initScanner();
}
private void initScanner(){
scanner = new ScannerInterface(this);
// scanner.open();//扫描引擎上电,该接口请勿频繁调用,频繁关闭串口会导致程序卡死
// scanner.resultScan();//恢复iScan默认设置,频繁重置串口会导致程序卡死
// scanner.close();//恢复关闭扫描引擎电源,频繁重置串口会导致程序卡死
/**设置扫描结果的输出模式,参数为0和1:
* 0为模拟输出,同时广播扫描数据(在光标停留的地方输出扫描结果同时广播扫描数据);
* 1为广播输出(只广播扫描数据);
* 2为模拟按键输出;
* */
scanner.setOutputMode(1);
//scanner.lockScanKey();
//锁定设备的扫描按键,通过iScan定义扫描键扫描,用户也可以自定义按键。
// scanner.unlockScanKey();
// //释放扫描按键的锁定,释放后iScan无法控制扫描按键,用户可自定义按键扫描。
// scanner.enablePlayBeep(true);//是否允许蜂鸣反馈
// scanner.enableFailurePlayBeep(true);//扫描失败蜂鸣反馈
// scanner.enablePlayVibrate(true);//震动开启与关闭
// scanner.timeOutSet(5);//设置扫描延时5秒
// scanner.intervalSet(0); //设置连续扫描间隔时间为0,单位为毫秒
// scanner.lightSet(true);//开启/关闭左上角扫描指示灯
// scanner.addPrefix("AAA");//添加前缀
// scanner.addSuffix("BBB");//添加后缀
// scanner.interceptTrimleft(2); //截取条码左边字符
// scanner.interceptTrimright(3);//截取条码右边字符
// scanner.filterCharacter("9");//过滤特定字符9
// scanner.enableAddKeyValue(1);//附加后缀 无/ENTER/TAB/回车
// scanner.SetErrorBroadCast(true);//扫描错误广播
//扫描结果的意图过滤器action一定要使用"android.intent.action.SCANRESULT"
intentFilter = new IntentFilter();
intentFilter.addAction(RES_ACTION);
//注册广播接受者
scanReceiver = new ScannerResultReceiver();
registerReceiver(scanReceiver, intentFilter);
}
/**---------------------------------------------------------------------*/
/**以下为客户自定义按键处理方式:
* 指定只能按键键值为139的物理按键(中间黄色按键)按下来触发扫描*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == 139&&event.getRepeatCount()==0){
scanner.scan_start();
// scanner.ShowUI();
}
return super.onKeyDown(keyCode, event);
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == 139){ /**按键弹起,停止扫描*/
scanner.scan_stop();
}else if (keyCode == 140){
scanner.scan_stop();
isContinue=!isContinue;
if(isContinue){
scanner.continceScan(true);
}else{
scanner.continceScan(false);
}
}
return super.onKeyUp(keyCode, event);
}
/**---------------------------------------------------------------------*/
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
scanner.close();
}
/**
* 扫描结果广播接收
*/
private class ScannerResultReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
Log.d("111","intent.getAction()-->"+intent.getAction());
final String scanResult = intent.getStringExtra("value");
/** 如果条码长度>0,解码成功。如果条码长度等于0解码失败。*/
if (intent.getAction().equals(RES_ACTION)){
//获取扫描结果
if(scanResult.length()>0){
Log.d("111","----->扫描成功!");
tvScanResult.append("Barcode:"+scanResult+"
");
}else{//else if(scanResult.length()==0)
/**扫描失败提示使用有两个条件:
1,需要先将扫描失败提示接口打开只能在广播模式下使用,其他模式无法调用。
2,通过判断条码长度来判定是否解码成功,当长度等于0时表示解码失败。
* */
Log.d("111","----->扫描失败!");
Toast.makeText(getApplicationContext(), "解码失败!", Toast.LENGTH_SHORT).show();
}
}
}
}
}