一般Camera调用open以及startPreview需要确保不多次调用, 如果Camera.open(); 或者camera.startPreview();连续调用了多次,将可能会发生 java.lang.RuntimeException: startPreview failed;
可以使用boolean 全局变量来记录当前camera的状态。来保证这一点。 private void initCamera() { if (!isView) { camera = Camera.open(); } if (camera != null && !isView) { try { Camera.Parameters myParameters = camera.getParameters(); myParameters.setPictureFormat(ImageFormat.JPEG); camera.setParameters(myParameters); camera.setPreviewDisplay(holder); camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } isView = true; }
} 摘自:http://blog.csdn.net/davidbeckham2901/article/details/7696497 1 https://code.google.com/p/zxing/ 下載庫 android平臺所需文件為 android code(因為要學習所以沒有打jar包直接用源碼) androidtest android-integration 其中androidtest 并不是必須的只是一些例子而已 androidtest 依賴 android-integration,android。 android 依賴code 2 導入工程 android 與 androidtest code目錄下的src文件夾是二維碼解析與編碼的庫,它是一個javase 工程 我在這裡降它更改為android工程,然後把這個android(可以直接把android- integration裏面的類文件直接拷貝到code目錄裏面合併這2個庫)設置為一個庫,添加到android與amdrpodtest工程裏面,處理一些錯誤可以運行了。 3 androidtest 工程掃描主要代碼為 IntentIntegrator integrator = new IntentIntegrator(ZXingTestActivity.this); //設置二維碼掃描屏幕的參數 IntentIntegrator integrator = new IntentIntegrator(ZXingTestActivity.this); 生成二維碼代碼 private void encodeBarcode(CharSequence type, CharSequence data) { IntentIntegrator integrator = new IntentIntegrator(this); 注意:只要安裝了 android工程 上面的代碼在任何你寫的android工程裏面都可以調用掃描二維碼的功能 4 IntentIntegrator 類 這個類是一個工具類 它把生成與掃描二維碼的代碼整合在了一起方便調用不需要再直接的調用庫裏面的代碼,但是它也是與庫所分離的,如上所述它需要先安裝android工程才能夠運行, 調用過程:1如上代碼當new一個IntentIntegrator 對象的時候,會調用initiateScan方法來初始化一些數據但是更重要的作用是在調用掃描類 initiateScan方法裏面添加掃描的類型比如產品條形碼 或者二維碼 其實這些數據有無都可以 new 出一個intent 參數為com.google.zxing.client.android.scan 這個不是一個類 而是在android 工程裏面定義的一個interfilter而它 指向的activity 就是android工程裏面的CaptureActivity這個是主要的掃描類, 跳轉的時候回加入一些數據如: intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());//掃描類型 initiateScan方法的返回值為AlertDialog 這個主要是爲了在沒有安裝android 工程的情況下程序會給出一個提示(2.2版本目前支持的工程有 private static final String BS_PACKAGE = "com.google.zxing.client.android" ; ) 檢查包存在的方法是獲取所以包名看是否有這2個包 findTargetAppPackage(Intent intent) 實現這個功能 2 在成功掃描之後 CaptureActivity 退出 返回到 androidtest主activity 的onActivityResult方法裏面調用 IntentIntegrator 的parseActivityResult方法來接收掃描出來的數據顯示在屏幕上面。 這就是在不理會庫的情況下調用過程 CaptureActivity類處理外來數據(因為它自己本身也可以運行)這裡先不說它本身是如何處理運行的只說處理外來的數據 主要在onResume裏面處理 包括camera的調用同樣也是在這里 1 檢查action 是否是com.google.zxing.client.android.scan 2 獲取類型 DecodeFormatManager.parseDecodeFormats(intent); 例如UPC_A UPC_E CODE_93 等在DecodeFormatManager有定義。 此方法是多態的可以接收 intent uri 與Iterable String scanFormatsString = intent.getStringExtra(Intents.Scan.FORMATS); 獲取類型 FORMATS 的值為SCAN_FORMATS 即剛才在IntentIntegrator 跳轉過來的時候 添加的掃描類型 其中還 有一些細節性的處理在這裡就不說了(因為我還沒看呢). 下步掃描處理明天開始學習。 至此 google zxing 條碼掃描已經完成了,使用起來很簡單但是得安裝它所需要的庫,所以明天開始學習android 工程,若有那裡不對之處還請高手指出,歡迎正在學習這個的與已經學習過的朋友來此討論與指點,不勝感激。 |
|
来自: 昵称15103532 > 《待分类1》