La cámara no se abre después de conceder el permiso en vista de superficie

Estoy haciendo una aplicación de cámara personalizada. que requiere la vista de la superficie y abre la cámara dentro de la vista de la superficie. Pero al ejecutar la misma aplicación en malvavisco estoy usando el permiso de tiempo de ejecución para conceder permiso para la cámara. después de que yo permita que el diálogo desaparezca pero la pantalla negra aparece y la cámara no consigue abierta. He intentado también llamando a la actividad de nuevo después de permitir, pero no funciona.

THANX por adelantado.

@Override public void surfaceChanged (SurfaceHolder titular, formato int, int width, int height) {

if (preview) { camera.stopFaceDetection(); camera.stopPreview(); preview = false; } if (camera != null) { preview = true; // Parameters Parameters parameters = camera.getParameters(); parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); List<Camera.Size> sizeList = camera.getParameters().getSupportedPreviewSizes(); bestSize = sizeList.get(0); for (int i = 1; i < sizeList.size(); i++) { if ((sizeList.get(i).width * sizeList.get(i).height) > (bestSize.width * bestSize.height)) { bestSize = sizeList.get(i); } } parameters.setPictureSize(bestSize.width, bestSize.height); camera.setParameters(parameters); camera.startPreview(); camera.startFaceDetection(); camera.setFaceDetectionListener(faceDetectionListener); } } } 

@Override public void surfaceCreated (SurfaceHolder holder) {

  customsurfaceview(); } 

public void customsurfaceview () {

  if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { Log.e("PLAYGROUND", "Permission is not granted, requesting"); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 123); } Log.e("Entered Surace Created", "----------------"); } 

public void SetPreview_onSurface () {

  if (camera == null) return; camera = Camera.open(); try { camera.setPreviewDisplay(surfaceView.getHolder()); } catch (IOException e) { e.printStackTrace(); Log.e("printStackTrace", "--" + e.getMessage()); } camera_button = (ImageView) findViewById(R.id.camera_button); camera_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (capture_chek == 0) { camera.cancelAutoFocus(); camera.takePicture(shutterCallback, null, pictureCallback); capture_chek = 1; } } }); 

@Override public void surfaceDestroyed (SurfaceHolder holder) {

  if (camera != null) { camera.release(); camera = null; preview = false; } } 

tengo el mismo problema, por favor vea mi ejemplo

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); // grant permission if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA); return; } // ***HERE*** is my error: if camera permission not granted all of below // code will never call try { mCamera = Camera.open();//you can use open(int) to use different cameras } catch (Exception e) { Log.d("ERROR", "Failed to get camera: " + e.getMessage()); } // set preview if (mCamera != null) { mCameraView = new CameraView(this, mCamera);//create a SurfaceView to show camera data FrameLayout camera_view = (FrameLayout) findViewById(R.id.camera_view); camera_view.addView(mCameraView);//add the SurfaceView to the layout } //btn to close the application ImageButton imgClose = (ImageButton) findViewById(R.id.imgClose); imgClose.setOnClickListener(this); } 

entonces creo una función initial() para enlazar todo el código de init cuando el permiso concedido init de llamada de nuevo

 public class CameraActivity extends MediaPickerBaseActivity implements View.OnClickListener { private static final int REQUEST_PERMISSION_CAMERA = 77; private Camera mCamera; private CameraView mCameraView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); setCancelFlag(); // grant permission if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA); return; } initial(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_PERMISSION_CAMERA) { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { initial(); } else { // TODO: 5/8/17 show permission denied // permission denied, boo! Disable the // functionality that depends on this permission. } } } /** * set cancel state from bundle (default: true) * * @see #isCancelIntermediate * @see #flagCancelIntermediate */ private void setCancelFlag() { isCancelIntermediate = getIntent().getBooleanExtra(flagCancelIntermediate, true); } /** * init view and camera */ private void initial() { try { mCamera = Camera.open();//you can use open(int) to use different cameras } catch (Exception e) { Log.d("ERROR", "Failed to get camera: " + e.getMessage()); } // set preview if (mCamera != null) { mCameraView = new CameraView(this, mCamera);//create a SurfaceView to show camera data FrameLayout camera_view = (FrameLayout) findViewById(R.id.camera_view); camera_view.addView(mCameraView);//add the SurfaceView to the layout } //btn to close the application ImageButton imgClose = (ImageButton) findViewById(R.id.imgClose); imgClose.setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.imgClose) cancel(); } @Override public void cancel() { finish(); } @Override public void sendResult() { } } 

espero que esto sea útil.

  • Cómo configurar la cámara de OpenCV para mostrar la vista previa tanto en orientación vertical como en pantalla completa
  • Uso de la intención de utilizar la cámara en Android
  • Reabrir la cámara después de cancelar el selector de intenciones
  • Error de la cámara Android 5001
  • Cómo capturar la imagen sin procesar desde la cámara Android
  • Cámara androide: onActivityResult () la intención es nula si tenía extras
  • La vista previa de la cámara sigue siendo negra
  • ¿Qué es SurfaceView SurfaceHolder Superficie de la cámara API android
  • Abra la cámara con Android
  • onActivityResult devuelto por una cámara, Intent null
  • Vista previa de la cámara en algunos dispositivos Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.