2016-10-21 48 views
2

私は単純なQRスキャナアプリを開発しようとしています。私はチュートリアルhereに従っていますが、うまくいかないようです。モバイルビジョンAPIでカメラが開けない

以下は、私のbuild.gradle(アプリケーションレベル)

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 24 
    buildToolsVersion "24.0.3" 
    defaultConfig { 
     applicationId "qrcode.auro.com.qrreaderexample" 
     minSdkVersion 16 
     targetSdkVersion 24 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:24.2.1' 
    compile 'com.google.android.gms:play-services-vision:9.6.1' 
    compile fileTree(dir: 'libs', include: ['*.jar']) 

    testCompile 'junit:junit:4.12' 
} 

のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="qrcode.auro.com.qrreaderexample"> 

    <uses-permission android:name="android.permission.CAMERA"/> 
    <uses-feature 
     android:name="android.hardware.camera2" 
     android:required="true"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

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

     <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:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="qrcode.auro.com.qrreaderexample.MainActivity"> 

    <TextView 
     android:id="@+id/barcode_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentTop="true" 
     android:text="READING BARCODE...."/> 


    <SurfaceView 
     android:id="@+id/surface_view" 
     android:layout_width="300dp" 
     android:layout_height="300dp" 
     android:layout_centerInParent="true"/> 


    <Button 
     android:id="@+id/scanner_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="SCAN" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true"/> 

</RelativeLayout> 
です

MainActivity.java

package qrcode.auro.com.qrreaderexample; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.graphics.Camera; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.util.SparseArrayCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.SparseArray; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.widget.Button; 
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 AppCompatActivity { 

    private SurfaceView surfaceView; 
    private Button button; 
    private TextView barcodeText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     surfaceView = (SurfaceView) findViewById(R.id.surface_view); 
     button = (Button) findViewById(R.id.scanner_button); 
     barcodeText = (TextView) findViewById(R.id.barcode_text); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       createCameraSource(); 
      } 
     }); 


    } 

    private void createCameraSource() { 

     BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(this).build(); 
     final CameraSource cameraSource = new CameraSource.Builder(this, barcodeDetector) 
       .setAutoFocusEnabled(true) 
       .setRequestedPreviewSize(500, 500) 
       .build(); 

     surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { 
      @Override 
      public void surfaceCreated(SurfaceHolder holder) { 
       if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
        // TODO: Consider calling 
        // ActivityCompat#requestPermissions 
        // here to request the missing permissions, and then overriding 
        // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
        //           int[] grantResults) 
        // to handle the case where the user grants the permission. See the documentation 
        // for ActivityCompat#requestPermissions for more details. 
        return; 
       } 
       try { 
        cameraSource.start(surfaceView.getHolder()); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

      @Override 
      public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

      } 

      @Override 
      public void surfaceDestroyed(SurfaceHolder holder) { 
       cameraSource.stop(); 
      } 
     }); 

     barcodeDetector.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) { 

        barcodeText.setText(barcodes.valueAt(0).displayValue); 

       } else 
        barcodeText.setText("NO BARCODES FOUND!!!!"); 

      } 
     }); 

    } 
} 

私はカメラを開き、コードを読み始める必要があり、ここでボタン(R.id.scanner_button)を持っていますが、それはしていません。私はボタンをクリックし

たびに、私は私のlogcatで、次を得る:

10-21 13:16:55.370 25722-25722/qrcode.auro.com.qrreaderexample W/DynamiteModule: Local module descriptor class for com.google.android.gms.vision.dynamite not found. 
10-21 13:16:55.373 25722-25722/qrcode.auro.com.qrreaderexample I/DynamiteModule: Considering local module com.google.android.gms.vision.dynamite:0 and remote module com.google.android.gms.vision.dynamite:8 
10-21 13:16:55.374 25722-25722/qrcode.auro.com.qrreaderexample I/DynamiteModule: Selected remote version of com.google.android.gms.vision.dynamite, version >= 8 

私はここで何をしないのですか?

答えて

0

Google Playサービスと同じバグのようです。たとえば、Firebaseの同様のバグ - link。 logcat出力に表示されるログには、エラーではなく警告レベルがあります。あなたのコードについて

からsurfaceCreated()が呼び出されていない、あなたは正しくSurfaceViewHolderを初期化する必要があり、例えばMySurfaceViewextends SurfaceViewことを作成し、thisのようになめらか。

また、BarcodeDetectorクラスを使用しているバーコードリーダー用の公式のGoogle exampleが表示されます。この例では、LogCatには警告メッセージが表示されていますが、バーコードリーダーは正しく動作しています。

関連する問題