2015年4月20日 星期一

Android Zxing QRcode Scanner QRcode掃描

將掃一維二維條碼功能zxing加入自己的app
前置步驟
Step1.下載zxing https://github.com/zxing/zxing/archive/master.zip

Step2. File -> import android這個資料夾


Step3. 去下載的資料夾 android-core 最裡層的CameraConfigurationUtils.java檔案


複製貼到剛剛import下的CaptureActivity\src\com\google\zxing\client\android\camera下。


Step4. 下載core-3.2.0.jar http://mvnrepository.com/artifact/com.google.zxing/core/3.2.0
在CaptureActivity資料夾下建立libs,將core-3.2.0.jar放入。

Step5. 在 CaptureActivity專案點右鍵 -> Properties->點選Android->勾選Android 4.4.2


點選 Java Compiler ->Compiler選擇 compliance level: 1.7


Step6. 點選上方功能列Project -> Clean ->勾選CaptureActivity,
然後回頭去把Android的Is Library打勾


Step7. 打勾後有些檔案會出現錯誤,打開這些檔案,在switch上用滑鼠點一下,按下鍵盤
Ctrl+1,點選Convert'switch' to 'if-else',每個有錯誤的檔案接照此方法。


---------------------------------------已上完成前置動作---------------------------------------

建立新專案
1.在專案點右鍵 -> Properties->點選Android->點選Add->加入CaptureActivity


2.AndroidManifest.xml


    
    

    
    

    
        
            
                
                

                
                
            
        
        
        
            
                
                

                
                
            
            
                
                

                
                
            
        
    


3./res/layout/activity_main.xml


    
    

    

    


4.MainActivity.java
package tw.android;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {
 
 static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }

 //掃描一維條碼
 public void scanBar(View v) {
  try {
   Intent intent = new Intent(ACTION_SCAN);
   intent.putExtra("SCAN_MODE", "PRODUCT_MODE"); //一維條碼模式
   startActivityForResult(intent, 0);
  } catch (ActivityNotFoundException anfe) {
   
  }
 }
 
 //掃描QRcode
 public void scanQR(View v) {
  try {
   Intent intent = new Intent(ACTION_SCAN);
   intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); //QR code模式
   startActivityForResult(intent, 0);
  } catch (ActivityNotFoundException anfe) {
  
  }
 }

 //傳回結果
 public void onActivityResult(int requestCode, int resultCode, Intent intent) {
  if (requestCode == 0) {
   if (resultCode == RESULT_OK) {
    //get the extras that are returned from the intent
    String contents = intent.getStringExtra("SCAN_RESULT"); //掃描結果
    String format = intent.getStringExtra("SCAN_RESULT_FORMAT");//掃描格式
    Toast toast = Toast.makeText(this, "內容:" + contents + " 格式:" + format, Toast.LENGTH_LONG);
    toast.show();
   }
  }
 }
}


檔案下載:
https://github.com/terryyamg/scannerTest
參考來源:
1.https://github.com/zxing/zxing
2.http://www.androidaz.com/development/zxing-qr-reader-direct-integration
3.http://examples.javacodegeeks.com/android/android-barcode-and-qr-scanner-example/
4.http://mvnrepository.com/artifact/com.google.zxing/core/3.2.0
5.http://stackoverflow.com/questions/11226941/error-in-switch-cases-of-zxing-project-in-android
6.http://stackoverflow.com/questions/24818566/build-library-zxing-for-android-project

12 則留言 :

  1. 請問有用 android studio的方法嗎

    回覆刪除
    回覆
    1. 兩個方法
      1.從eclipse轉檔import到Android Studio 參考 http://www.inote.tw/how-to-transfer-eclipse-android-project-to-android-studio
      2.下載Android Studio版的zxing https://github.com/journeyapps/zxing-android-embedded/archive/master.zip
      Import到你的Android Studio,執行裡面的sample

      刪除
  2. 做到6之後為什麼都沒有發生檔案錯誤??

    回覆刪除
    回覆
    1. 哈哈,這我就不曉得了耶,不過沒發生錯誤不是很好嗎

      刪除
  3. 請問一下
    setContentView(R.layout.activity_main )
    R下面出現紅色
    CLEAN過了都沒辦法
    要怎麼辦?

    回覆刪除
    回覆
    1. 這代表你的R檔案不存在或有錯誤
      這時候要先
      1.查看XML檔是否有錯誤
      2.若無錯誤,Clear你的Project
      3.Clear還是存在錯誤,請重新建立一個新Project,每個檔案都一個一個新增,再將對應程式碼貼過去,不要用複製檔案的方式

      刪除
  4. cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue(parameters, screenResolution);
    這一句有問題
    好像找不到CameraConfigurationUtils

    回覆刪除
    回覆
    1. 應該是少了這個步驟,所以少了這個檔案

      Step3. 去下載的資料夾 android-core 最裡層的CameraConfigurationUtils.java檔案

      刪除
  5. 請問這個CameraConfigurationUtils cannot be resolved的問題,他一直說無法解析
    但是我都有把步驟三的檔案放進去了,還是說我有甚麼部分沒做到

    回覆刪除
    回覆
    1. 你可以先試試Project -> Clean看看,不行的話再自己建一個CameraConfigurationUtils.java檔案,然後複製程式碼過去。

      刪除
  6. 你好 請問你用的版本跟軟體是哪個呢謝謝

    回覆刪除
    回覆
    1. 手機版本Android 4.2以上,開發IDE:Eclipse 或 Android Studio

      刪除