Trình quét mã của Google (chỉ dành cho Android)

API trình quét mã của Google cung cấp một giải pháp hoàn chỉnh để quét mã mà không yêu cầu ứng dụng của bạn phải yêu cầu quyền sử dụng máy ảnh, đồng thời vẫn bảo đảm quyền riêng tư của người dùng. Bạn có thể thực hiện việc này bằng cách uỷ quyền cho Dịch vụ Google Play thực hiện nhiệm vụ quét mã và chỉ trả về kết quả quét cho ứng dụng của bạn (Video 1). Mọi hoạt động xử lý hình ảnh đều diễn ra trên thiết bị và Google không lưu trữ kết quả hoặc dữ liệu hình ảnh. API này hỗ trợ các định dạng mã giống như API Quét mã vạch của Bộ công cụ học máy và trả về cùng một đối tượng Barcode.

API này lý tưởng cho các ứng dụng yêu cầu quét mã liền mạch mà không cần giao diện người dùng hoặc trải nghiệm máy ảnh tuỳ chỉnh. Quá trình triển khai nằm hoàn toàn trong Dịch vụ Google Play, đảm bảo tác động tối thiểu đến kích thước ứng dụng.

Kể từ phiên bản 16.1.0, bạn có thể bật tính năng tự động thu phóng để cho phép trình quét mã của Google tự động quét mã vạch ở xa máy ảnh. Khi người dùng hướng thiết bị của họ vào một mã vạch, máy quét sẽ phát hiện và phóng to mã vạch một cách thông minh. Nhờ đó, bạn không cần phải điều chỉnh chế độ thu phóng theo cách thủ công, giúp quá trình quét mã vạch nhanh hơn, chính xác hơn và dễ dàng hơn (xem Video 2).

Video 1. Tích hợp trình quét mã của Google Video 2. Hiệu ứng tự động thu phóng

Đối với các trường hợp sử dụng phức tạp hơn đòi hỏi giao diện người dùng tuỳ chỉnh, bạn nên trực tiếp sử dụng API quét mã vạch của Bộ công cụ học máy.

Nếu bạn có câu hỏi, muốn gửi lỗi hoặc cần được hỗ trợ, hãy xem trang cộng đồng về Bộ công cụ học máy.

Trước khi bắt đầu

Để chuẩn bị cho ứng dụng của bạn, hãy hoàn tất các bước trong những phần sau.

Định cấu hình ứng dụng

  1. Trong tệp settings.gradle cấp cao nhất, hãy thêm kho lưu trữ Maven của Googlekho lưu trữ trung tâm Maven vào khối dependencyResolutionManagement:

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. Thêm phần phụ thuộc Dịch vụ Google Play cho SDK play-services-code-scanner vào tệp bản dựng Gradle của mô-đun, thường là app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
    }
    
  3. Bạn có thể định cấu hình ứng dụng để Dịch vụ Google Play tự động tải mô-đun quét xuống thiết bị trong khi ứng dụng của bạn được cài đặt từ Cửa hàng Play.

    <application ...>
      ...
      <meta-data
          android:name="com.google.mlkit.vision.DEPENDENCIES"
          android:value="barcode_ui"/>
      ...
    </application>
    

    Bạn cũng có thể kiểm tra rõ ràng tình trạng có sẵn của mô-đun quét và yêu cầu tải xuống thông qua ModuleInstallClient API của Dịch vụ Google Play.

    Nếu bạn không bật tính năng tải mô-đun xuống tại thời điểm cài đặt hoặc yêu cầu tải xuống rõ ràng và mô-đun quét chưa được cài đặt cho một trường hợp sử dụng khác, thì Dịch vụ Google Play sẽ tải mô-đun quét xuống trong lần đầu tiên sử dụng.

Quét mã

Triển khai các bước sau để quét mã vạch.

  1. Không bắt buộc: Định cấu hình trình quét mã.

    Nếu biết mình muốn đọc định dạng mã vạch nào, bạn có thể cải thiện tốc độ của trình phát hiện mã vạch bằng cách định cấu hình trình phát hiện đó để chỉ phát hiện các định dạng đó. Ví dụ: để chỉ phát hiện mã Aztec và mã QR, hãy tạo một đối tượng GmsBarcodeScannerOptions như trong ví dụ sau:

    Kotlin

    val options = GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(
           Barcode.FORMAT_QR_CODE,
           Barcode.FORMAT_AZTEC)
       .build()

    Java

    GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(
           Barcode.FORMAT_QR_CODE,
           Barcode.FORMAT_AZTEC)
       .build();

    Theo mặc định, tính năng tự động thu phóng sẽ tắt. Để bật chức năng tự động thu phóng bắt đầu từ phiên bản 16.1.0, hãy gọi enableAutoZoom() như trong ví dụ mã sau.

    Kotlin

    val options = GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(...)
       .enableAutoZoom() // available on 16.1.0 and higher
       .build()

    Java

    GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(...)
       .enableAutoZoom() // available on 16.1.0 and higher
       .build();
  2. Lấy một thực thể của GmsBarcodeScanner, như trong ví dụ về mã:

    Kotlin

    val scanner = GmsBarcodeScanning.getClient(this)
    // Or with a configured options
    // val scanner = GmsBarcodeScanning.getClient(this, options)

    Java

    GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(this);
    // Or with a configured options
    // GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(context, options);
  3. Yêu cầu quét mã bằng cách gọi startScan().

    Kotlin

    scanner.startScan()
       .addOnSuccessListener { barcode ->
           // Task completed successfully
       }
       .addOnCanceledListener {
           // Task canceled
       }
       .addOnFailureListener { e ->
           // Task failed with an exception
       }

    Java

    scanner
       .startScan()
       .addOnSuccessListener(
           barcode -> {
             // Task completed successfully
           })
       .addOnCanceledListener(
           () -> {
             // Task canceled
           })
       .addOnFailureListener(
           e -> {
             // Task failed with an exception
           });
  4. Xử lý Barcode thu được.

    Kotlin

    val rawValue: String? = barcode.rawValue

    Java

    String rawValue = barcode.getRawValue();