1. 程式人生 > >zxing二維碼不可以多次掃描

zxing二維碼不可以多次掃描

給大家看一下效果圖:


最近公司開發一個專案,一個購物的專案。用到了掃描獲取條形碼,挺簡單網上案例比較多,去誰那裡有可能copy一大堆,但是往往他就是一個演示的Demo和你的有很多差距,所以這就需要我們動腦子思考了,我們首先拿到人家的專案不要著急往自己的專案裡copy。我們先執行一遍人家的,看一下方法和他的思路,我們開發主要還是思維和邏輯,不能總copy人家程式碼吧?  首先拿到人家專案二維碼只可以掃一次  就返回了主介面 我就進行除錯看他究竟執行那裡程式碼,後來我發現他會把你的獲取的值傳給一個Handler然後傳到執行緒池中了,蒙了我也是新手。好吧不懂了,給我幹到了底層去了,但是回過來一想,我不就是獲取結果,然後傳給handler嗎?為什麼我不在返回資料後再執行這個方法呢。 哇哦果然成了。

Mip'ca'Activity'Capture類中

程式碼如下:

  /**
     * 處理掃描結果
     * @param result
     * @param barcode
     */
    public void handleDecode(Result result, Bitmap barcode) {
        inactivityTimer.onActivity();
        playBeepSoundAndVibrate();
        String resultString = result.getText();
        if (resultString.equals("")) {
            Toast.makeText(MipcaActivityCapture.this, "Scan failed!", Toast.LENGTH_SHORT).show();
        } else {
            mList.add(resultString);
            initfindview();
            mHandler.postDelayed(runnable, 3000);
        }
    }


    Handler mHandler = new Handler();
    Runnable runnable = new Runnable() {

        @Override
        public void run() {
            // handler自帶方法實現定時器
            try {
                if (handler != null)    
                    mHandler.postDelayed(runnable,3000);
                    handler.restartPreviewAndDecode();  //實現多次掃描
                System.out.println("do...");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("exception...");
            }
        }
    };
為什麼要寫一個handler呢!如果不寫的話他會掃描很多次這個資料 所以我就讓他3秒之後再描掃 ok解決額 
我們專案就是把掃描的結果傳遞帶Listview上  可以手動輸入也可以開啟手電筒  如果需要的小夥伴郵箱發到評論裡我看到會及時給你發過去