2016-10-19 107 views
3

我正在嘗試開發一款可以打開相機並掃描給定QR碼的應用程序。但是,我有一個約束,指出我不能使用任何第三方庫,如ZBar Code Reader或ZXingScanner,因爲它會增加我的apk的大小。用於打開相機並掃描QR碼的Android API?

我一直在尋找到給here谷歌的條碼的API,但它似乎沒有執行我希望我的應用程序來執行,也就是說,它不會打開任何相機,做圖像的實時掃描什麼。

那麼,如何讓我的應用程序在特定範圍內打開相機並對QR碼執行實時掃描?

謝謝你的時間!

+0

我不認爲這是可能的。畢竟,你必須用零字節的代碼來做到這一點,否則它會增加APK的大小。 – CommonsWare

+1

@Auro:Barcode API文檔比您分享的鏈接還要多(例如[高級示例](https://github.com/googlesamples/android-vision))...當然,您還可以讀取條形碼通過Google Api使用相機。 請查閱https://www.varvet.com/blog/android-qr-code-reader-made-easy/以獲取簡化版本,演示使用Google API掃描條形碼(qr代碼)。 – Algar

回答

0

谷歌條形碼API支持打開相機。這裏是示例代碼

// A barcode detector is created to track barcodes. An associated multi-processor instance 
    // is set to receive the barcode detection results, track the barcodes, and maintain 
    // graphics for each barcode on screen. The factory is used by the multi-processor to 
    // create a separate tracker instance for each barcode. 
    BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); 
    BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay); 
    barcodeDetector.setProcessor(
      new MultiProcessor.Builder<>(barcodeFactory).build()); 

    if (!barcodeDetector.isOperational()) { 
     // Note: The first time that an app using the barcode or face API is installed on a 
     // device, GMS will download a native libraries to the device in order to do detection. 
     // Usually this completes before the app is run for the first time. But if that 
     // download has not yet completed, then the above call will not detect any barcodes 
     // and/or faces. 
     // 
     // isOperational() can be used to check if the required native libraries are currently 
     // available. The detectors will automatically become operational once the library 
     // downloads complete on device. 
     Log.w(TAG, "Detector dependencies are not yet available."); 

     // Check for low storage. If there is low storage, the native library will not be 
     // downloaded, so detection will not become operational. 
     IntentFilter lowstorageFilter = new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW); 
     boolean hasLowStorage = registerReceiver(null, lowstorageFilter) != null; 

     if (hasLowStorage) { 
      Toast.makeText(this, R.string.low_storage_error, Toast.LENGTH_LONG).show(); 
      Log.w(TAG, getString(R.string.low_storage_error)); 
     } 
    } 

    // Creates and starts the camera. Note that this uses a higher resolution in comparison 
    // to other detection examples to enable the barcode detector to detect small barcodes 
    // at long distances. 
    CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector) 
      .setFacing(CameraSource.CAMERA_FACING_BACK) 
      .setRequestedPreviewSize(1600, 1024) 
      .setRequestedFps(15.0f); 

    // make sure that auto focus is an available option 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
     builder = builder.setFocusMode(
       autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null); 
    } 

    mCameraSource = builder 
      .setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null) 
      .build(); 
} 

,你可以參考,谷歌在這裏條碼樣品

https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcode-reader