0

У меня есть аналогичный вопрос: this question и this question, ни один из которых не принял принятое решение.Как использовать фонарик/факел с API-интерфейсом для чтения штрих-кодов Google Vision?

В основном я использую API штрих-кода Google Vision, но нет очевидного способа управления фонариком.

This answer предлагает использовать this code, но (попробовав и не удалось) Я не уверен, как интегрировать его в свое приложение.

Вот код для моей деятельности, которая в основном запускает/сканер штрих-кода камеры, а также использует пункт меню из моего BaseActivity, которую я хочу использовать, чтобы быть в состоянии переключить фонарик:

import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.util.SparseArray; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import com.google.android.gms.common.api.CommonStatusCodes; 
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 ScanQRCodeAutoActivity extends BaseActivity { 

    private static final String LOG_TAG = ScanQRCodeAutoActivity.class.getSimpleName(); 

    private static final int CAMERA_SOURCE_PREVIEW_WIDTH = -1; 
    private static final int CAMERA_SOURCE_PREVIEW_HEIGHT = 480; 
    public static final String QR_CODE_VALUE = "QR_CODE_VALUE"; 

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

     super.initFlash(savedInstanceState); 

     final SurfaceView cameraSurfaceView = (SurfaceView)findViewById(R.id.cameraSurfaceView); 

     BarcodeDetector.Builder barcodeDetectorBuilder = new BarcodeDetector.Builder(this); 
     barcodeDetectorBuilder.setBarcodeFormats(Barcode.QR_CODE); 
     BarcodeDetector barcodeDetector = barcodeDetectorBuilder.build(); 
     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) { 

        Intent data = new Intent(); 
        data.putExtra(QR_CODE_VALUE, barcodes.valueAt(0).displayValue); 
        setResult(CommonStatusCodes.SUCCESS, data); 
        finish(); 

       } 

      } 
     }); 

     CameraSource.Builder cameraSourceBuilder = new CameraSource.Builder(this, barcodeDetector); 
     //cameraSourceBuilder.setAutoFocusEnabled(true); 
     //cameraSourceBuilder.setFacing(CameraSource.CAMERA_FACING_BACK); 
     if (CAMERA_SOURCE_PREVIEW_WIDTH != -1 && CAMERA_SOURCE_PREVIEW_HEIGHT != -1) { 
      cameraSourceBuilder.setRequestedPreviewSize(CAMERA_SOURCE_PREVIEW_WIDTH, CAMERA_SOURCE_PREVIEW_HEIGHT); 
     } 

     final CameraSource cameraSource = cameraSourceBuilder.build(); 

     cameraSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { 
      @Override 
      public void surfaceCreated(SurfaceHolder holder) { 

       try { 
        cameraSource.start(cameraSurfaceView.getHolder()); 

       } 
       catch (SecurityException se) { 
        Log.e(LOG_TAG, "Could not start camera source.", se); 
       } 
       catch (IOException ioe) { 
        Log.e(LOG_TAG, "Couldn't start camera source.", ioe); 
       } 

      } 

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

      @Override 
      public void surfaceDestroyed(SurfaceHolder holder) { 

       cameraSource.stop(); 

      } 
     }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 

     MenuItem flashItem = menu.findItem(R.id.action_flash); 
     flashItem.setVisible(true); 

     return true; 
    } 

    @Override 
    protected void toggleFlash() { 

     super.toggleFlash(); 

     // HELP!! 

     invalidateOptionsMenu(); 
     if (isFlashOn()) { 
      Utilities.makeToast(this, "Flash turned on"); 
     } 
     else { 
      Utilities.makeToast(this, "Flash turned off"); 
     } 

    } 
} 

ответ