使用Android的Mobile Vision API扫描QR码

我遵循这个教程如何构build一个可以扫描QR码的Android应用程序。

这是完整的代码。 我添加了Google Play服务,使用compile 'com.google.android.gms:play-services:7.8.0'

AndroidManifest.xml中

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="bitinvent.io.qrscanner" > <meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="barcode"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CAMERA"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

activity_main.xml中

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <SurfaceView android:id="@+id/cameraView" android:layout_width="640px" android:layout_height="480px" android:layout_centerVertical="true" android:layout_alignParentLeft="true"/> <TextView android:id="@+id/infoTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/cameraView" android:layout_marginLeft="16dp" android:text="Nothing to read" android:textSize="20sp"/> </RelativeLayout> 

MainActivity.java

 package bitinvent.io.qrscanner; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.util.SparseArray; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.TextView; import com.google.android.gms.vision.CameraSource; import com.google.android.gms.vision.Detector; import com.google.android.gms.vision.barcode.Barcode; import com.google.android.gms.vision.barcode.BarcodeDetector; import java.io.IOException; public class MainActivity extends Activity { private SurfaceView cameraView; private TextView barcodeInfo; private CameraSource cameraSource; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cameraView = (SurfaceView) findViewById(R.id.cameraView); barcodeInfo = (TextView) findViewById(R.id.infoTextView); BarcodeDetector detector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build(); cameraSource = new CameraSource.Builder(this, detector).setRequestedPreviewSize(640, 480).build(); cameraView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { try { cameraSource.start(cameraView.getHolder()); } catch (IOException e) { Log.e("CAMERA SOURCE", e.getMessage()); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { cameraSource.stop(); } }); detector.setProcessor(new Detector.Processor<Barcode>() { @Override public void release() { } @Override public void receiveDetections(Detector.Detections<Barcode> detections) { final SparseArray<Barcode> barcodes = detections.getDetectedItems(); if (barcodes.size() != 0) { barcodeInfo.post(new Runnable() { @Override public void run() { barcodeInfo.setText(barcodes.valueAt(0).displayValue); } }); } } }); } } 

我在运行Android 4.4.2的HTC Desire 816上testing了这个。 但似乎没有工作。 相机视图是活动的,但是当指向QR码时,它不会检测到任何东西。 但是也不会发生错误或崩溃。

我错过了什么吗?

Solutions Collecting From Web of "使用Android的Mobile Vision API扫描QR码"

我是Android开发的新手,但是我使用了play services 8.1跟着教程。 工作。

代码与您的代码非常相似。 唯一的区别是我有应用程序级别下的元标记,我删除了.setBarcodeFormats(Barcode.QR_CODE),因为它专门将其限制为QRtypes代码。

也使用横向应用程序,因为肖像不适合我。 即使在QR码的环境中,我也有时需要慢慢地将QR码从相机移开,直到它能够识别出来。

你在设备中启用了互联网连接吗? 为了通过Google Play服务下载数据; 它需要通过设备的互联网连接,但不需要提供任何许可。

尝试移动以下行

<meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="barcode" />

<intent-filter/>之后显示在您的活动标签中

所以它看起来像这样

<meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="barcode" /> </activity>

让我知道是否有帮助