2016-10-19 54 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