<cite id="zhpxb"></cite><cite id="zhpxb"></cite>
<cite id="zhpxb"><track id="zhpxb"></track></cite>

    <delect id="zhpxb"><track id="zhpxb"></track></delect>

      <ins id="zhpxb"></ins>
        <cite id="zhpxb"></cite>

        設為首頁添加收藏

        您好! 歡迎訪問PDA導購網,最專業的選型咨詢網站

        選型/技術疑問留言(請點擊進入留言界面)

        微信
        掃碼關注官方微信
        電話:15016095220

        您的位置:首頁>>技術文章>>idata售后
        idata售后

        idata手持終端掃描開發

        發布日期: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();
                        }
                    }
                }
            }
        }


        具體可以參考SDK開發包圖片.png


        分享到

        新浪微博

        分享到

        朋友圈

        分享到

        QQ空間

        国产精品无码v在线观看_国产91久久精品一区二区_国产精品﹣色哟哟免费_色男色女午夜福利_成人網站99re