2011-12-01 43 views
25

Tôi cố gắng để Tích hợp ZXing QR Code vào ứng dụng Android của tôi mà không cần cài đặt ứng dụng máy quét mã vạch, tôi đã làm theo các bước như sau:Tích hợp máy quét mã QR ZXing mà không cần cài đặt mã vạch Máy quét

1) Trước hết Tôi đã tải ZXing.zip và giải nén nó

2) mở dự án ZXing làm dự án Android hiện có rồi truy cập thư mục android và mở thư mục android và cũng bao gồm tệp core.jar vào dự án ZXing có tên CaptureActivity.

3) Tôi đã sử dụng dự án CaptureActivity làm thư viện trong dự án có tên 'QRCodeSample'. (vấn đề trong đó có CaptureActivity như một thư viện)

4) Mã của tôi là như below3:

public class QRCodeSampleActivity extends Activity { 
Button b1; 
static String contents; 

public static final int REQUEST_CODE = 1; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    b1 = (Button) findViewById(R.id.button1); 
    b1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      /*Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
      intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", 
        "QR_CODE_MODE"); 
      startActivityForResult(intent, 0);*/ 
      Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
      intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
      startActivityForResult(intent, 0); 


     } 
    }); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      Log.i("Barcode Result", contents); 
      Intent i1 = new Intent(QRCodeSampleActivity.this, webclass.class); 
      startActivity(i1); 
      // Handle successful scan 
     } else if (resultCode == RESULT_CANCELED) { 
      // Handle cancel 
      Log.i("Barcode Result","Result canceled"); 
     } 
    } 
} 

} 

Các file manifest là:

<uses-permission android:name="android.permission.CAMERA"/> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 

    <activity android:name="com.google.zxing.client.android.CaptureActivity" 
      android:screenOrientation="landscape" 
      android:configChanges="orientation|keyboardHidden" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
      android:windowSoftInputMode="stateAlwaysHidden"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="com.google.zxing.client.android.SCAN"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 


    </activity> 
    <activity 
     android:label="@string/app_name" 
     android:name=".QRCodeSampleActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 


    <activity android:name=".webclass"></activity> 

</application> 

</manifest> 

và thư viện không thêm nó cũng

LibraryInformation

Khi tôi đang cố gắng ru n dự án của tôi, thông báo lỗi là:

Không thể khởi tạo hoạt động ComponentInfo {com.qr.code/com.qr.code}: java.lang.ClassNotFoundException: com.qr.code trong bộ nạp dalvik.system.PathClassLoader [/data/app/com.qr.code-1.apk]

+0

Để bao gồm ZXing, tôi có thể tạo nó. Tôi nghĩ bạn sử dụng một số lớp khác. Tôi không thể nhớ rằng zxing sử dụng không gian tên com.qr.code – rekire

+0

Tại sao bạn sử dụng dự án thư viện. Bạn có thể xây dựng thư viện zxing đã tải xuống vào tệp jar bằng cách sử dụng kiến ​​và bao gồm tệp jar đó vào dự án của bạn. Đây là liên kết cho các hướng dẫn http://code.google.com/p/zxing/wiki/GettingStarted – blessenm

+0

Bạn có chắc chắn rằng điều này cũng hoạt động cho Android không? Tôi đã tạo lib của riêng mình với một số tiện ích mở rộng tùy chỉnh. – rekire

Trả lời

23

Cuối cùng tôi nhận được câu trả lời,

Tính đến ADT 14, các lĩnh vực tài nguyên (như R.id.decode) không hằng số dài hơn khi được xác định trong các dự án thư viện

Vì vậy, trong thư viện ZXing-> android-> com.google.zxing.client.android.CaptureActivityHandler.java và Deco deHandler.java

Thay thế cả hai lớp chuyển đổi báo cáo trường hợp với if-else, và sau đó nhập viện ZXing này vào dự án của bạn ..

Phần còn lại của mã hóa của dự án riêng của tôi là cùng ... chỉ là vấn đề với các lớp thư viện như những không được cập nhật như theo ADT 14 ..

Kanika

+21

Vui lòng không tích hợp mã của chúng tôi dưới dạng dự án thư viện. Vui lòng viết ứng dụng máy quét của riêng bạn và sử dụng lại các phần nếu bạn cần. Chúng tôi đã không mở nguồn cho bạn để sao chép theo cách này. –

+0

Tôi đã làm mọi thứ nổi bật nhưng vẫn có ngoại lệ đó. Tại sao tôi không thể tiếp cận những lớp học đó? Tôi đã thêm nó dưới dạng lib và cũng thêm core.jar làm jar bên ngoài. AndroidRuntime (6316): java.lang.RuntimeException: Không thể khởi tạo hoạt động ComponentInfo {com.sonqr/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android. CaptureActivity –

+0

tôn trọng @Kanika – Samer

0
  1. Sau khi nhập ZXing như dự án hiện có, Properties> Java Buildpath> kiểm tra "là thư viện" (nút kiểm tra) và sau đó thử thêm Zxing làm thư viện.

  2. Hãy chắc chắn rằng webclass.class tồn tại của bạn QRcodesampleActivity.java

3

tôi đã có vấn đề tương tự và sau giờ vật lộn với nó cuối cùng tôi quản lý để giải quyết nó như thế này.như Rubiraj trỏ

* Kích chuột phải vào dự án của bạn> Properties> Android> (dưới thư viện tab) Thêm dự án ZXing *

Giả sử bạn đã có thể tạo ra một cách chính xác dự án ZXing như một thư viện như nó được giải thích ở đây: http://damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcode-scanner-into-your-android-app-natively-using-eclipse/

4

Bạn cần phải làm theo bước như được đưa ra bởi các liên kết

http://www.androidaz.com/development/zxing-qr-reader-direct-integration

bạn có thể tải core.jar từ

http://repo1.maven.org/maven2/com/google/zxing/core/2.2/

Trên đây đang làm việc cho tôi, nếu chương trình của bạn vẫn chỉ cần đặt lõi-2.2.jar trong libs và làm sạch dự án của bạn

+0

đây có phải là bản sửa lỗi chuẩn không? Bạn đã đăng câu trả lời tương tự cho một số câu hỏi – acutesoftware

+0

+1 Cảm ơn bạn đã liên kết, Chúc mừng! –

+0

Liên kết đầu tiên bạn cung cấp đã chết. – shadox

17

Dành cho tất cả những người dùng Android Studio/Gradle đó

Được rồi, như nhiệm vụ của tôi hôm nay wa s để tích hợp ZXING vào một ứng dụng Android và không có nguồn tốt cho đầu vào trên tất cả, tôi sẽ cho bạn một gợi ý những gì làm cho tôi thành công - gây ra nó rất dễ dàng (trên phiên bản 2. *).

Có kho lưu trữ git tiện dụng thực sự cung cấp dự án thư viện android zxing như một kho lưu trữ AAR.

Tất cả bạn phải làm là thêm video này vào build.gradle bạn

repositories { 
    mavenCentral() 

    maven { 
     url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" 
    } 
} 

dependencies { 
    compile 'com.google.zxing:core:2.2' 
    compile 'com.embarkmobile:zxing-android-minimal:[email protected]' 
} 

và Gradle hiện tất cả sự kỳ diệu để biên dịch mã và làm cho nó truy cập vào ứng dụng của bạn .

Để bắt đầu Scanner sau đó, sử dụng lớp này/phương pháp:

IntentIntegrator.initiateScan(this); // `this` is the current Activity 

Nếu bạn đã từng ghé thăm liên kết mà bạn sẽ thấy rằng tôi chỉ cần sao chép & dán mã từ đó readme git. Nếu không đến đó để có thêm một số thông tin chi tiết và mã ví dụ!

Hy vọng sẽ hữu ích cho người đọc trong tương lai. Hòa bình :)

+0

Điều này trông giống như tôi chỉ thực sự hữu ích cho mã vạch. Tôi cần sử dụng mã QR. Liệu tôi có sai? – KairisCharm

+0

Làm việc với mã qr quá –

+0

Xin chào, tôi đã tải xuống các nguồn từ liên kết mà bạn đã cung cấp.Có thể biên dịch nó vào tập tin jar và sau đó nhập nó vào dự án studio android của tôi? Nếu có, bạn có thể cung cấp một số liên kết/hướng dẫn về cách xây dựng nó không? Tôi sẽ hạnh phúc nhất. Cảm ơn trước. – greenskin

1

Từng bước để thiết lập ZXing 3.2.1 trong eclipse

  1. Tải zxing-master.zip từ "https://github.com/zxing/zxing"
  2. Unzip zxing-master.zip, sử dụng Eclipse để nhập khẩu Dự án "android" trong zxing-master
  3. Tải xuống core-3.2.1.jar từ "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/"
  4. Tạo thư mục "libs" trong dự án "android" và dán cor-3.2.1.jar vào thư mục libs
  5. Nhấp vào dự án: chọn "thuộc tính" -> "Trình biên dịch Java" để thay đổi cấp thành 1.7. Sau đó nhấp vào "Android" thay đổi "Project build target" thành android 4.4.2+, vì việc sử dụng 1.7 yêu cầu biên dịch với Android 4.4
  6. Nếu "CameraConfigurationUtils.java" không tồn tại trong "zxing-master/android/app/src/main/java/com/google/zxing/máy khách/android/máy ảnh/". Bạn có thể sao chép từ "zxing-master/android-core/src/main/java/com/google/zxing/máy khách/android/máy ảnh /" và dán vào dự án của bạn.
  7. Làm sạch và xây dựng dự án. Nếu dự án của bạn hiển thị lỗi về "switch - case", bạn nên thay đổi chúng thành "if - else".
  8. Đã hoàn tất. Làm sạch và xây dựng dự án. Bạn có thể nhấp vào "Proprties"> "Android"> nhấp vào "Is Libraries" để sử dụng cho dự án của bạn
2

MaterialBarcodeScanner: Dễ sử dụng đầu đọc mã vạch cho Dự án Android của bạn (Sử dụng Google Mobile Vision API).

  1. Cung cấp phụ thuộc gradle

    biên dịch 'com.edwardvanraak: MaterialBarcodeScanner: 0.0.6-ALPHA'

  2. Xây dựng một MaterialBarcodeScanner

    private void startScan() { 
        /** 
        * Build a new MaterialBarcodeScanner 
        */ 
        final MaterialBarcodeScanner mBarcodeScanner 
          = new MaterialBarcodeScannerBuilder() 
          .withActivity(MainActivity.this) 
          .withEnableAutoFocus(true) 
          .withBleepEnabled(true) 
          .withBackfacingCamera() 
          .withText("Scanning...") 
          .withResultListener(new MaterialBarcodeScanner.OnResultListener() { 
           @Override 
           public void onResult(Barcode barcode) { 
            barcodeResult = barcode; 
            result.setText(barcode.rawValue); 
           } 
          }) 
          .build(); 
        mBarcodeScanner.startScan(); 
    } 
    
  3. Hook nó lên đến một nút

    fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    startScan(); 
    } 
    }); 
    
  4. Bắt đầu quét!

+0

Tôi làm cách nào để sử dụng thư viện này để quét liên tục (ví dụ: mà không phải chạm vào nút)? – LRMAAX

Các vấn đề liên quan