
分享到
新浪微博

分享到
朋友圈

分享到
QQ空間
發布日期:2020-05-09 來源: 本站 閱讀量(3424)
idata手持終端獲取掃描頭的掃描信息的方式可以通過引用SDK包(jar)獲取也可以通過監聽廣播(Intent)的模式進行獲取?,F在主流都是通過廣播進行監聽獲取掃描信息,我們下面講解的也是廣播模式。 首先要引入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();
}
}
}
}
}