I am following the next tutorial , which uses mobile vision api to create a barcode / qr code scanner. Although I entered the exact code that he said (at least I think), the camera is powered by cameraSource .
I added extra code to this process to see if it would make a difference, but it still doesn't. The problem is that when you start the SurfaceView application, which should display the CAMERA_FACING_BACK feed, but instead it's just black. If you could tell me why the feed is not displayed, and if there is one, then the code that needs to be changed will be very grateful.
MainActivity.java:
package com.example.neekondev.barcodeshortened; import android.Manifest; import android.content.pm.PackageManager; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; 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; import static com.google.android.gms.vision.CameraSource.CAMERA_FACING_BACK; import static com.google.android.gms.vision.CameraSource.CAMERA_FACING_FRONT; public class MainActivity extends AppCompatActivity { SurfaceView cameraView; TextView barcodeInfo; BarcodeDetector barcodeDetector; CameraSource cameraSource; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cameraView = (SurfaceView) findViewById(R.id.camera_view); barcodeInfo = (TextView) findViewById(R.id.code_info); barcodeDetector = new BarcodeDetector.Builder(this) .setBarcodeFormats(Barcode.CODE_39 | Barcode.CODE_93 | Barcode.CODE_128) .build(); cameraSource = new CameraSource .Builder(this, barcodeDetector) .setRequestedPreviewSize(640, 480) .setRequestedFps(20.0f) .setFacing(CAMERA_FACING_BACK) .build(); cameraView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { try { if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
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="com.example.neekondev.barcodeshortened.MainActivity"> <SurfaceView android:layout_width="640px" android:layout_height="480px" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:id="@+id/camera_view" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/code_info" android:layout_toRightOf="@+id/camera_view" android:textSize="20sp" android:layout_marginLeft="16dp" android:text="Nothing yet..." android:layout_alignParentTop="true" /> </RelativeLayout>
manifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.neekondev.barcodeshortened"> <meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="barcode"/> <uses-permission android:name="android.permission.CAMERA" /> <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>
source share