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.
- Orientación de la cámara / la imagen en Android
- Medición de intensidades de luz desde la cámara Android
- Android webview página recarga después de la captura de imagen y cargar en android 5 +
- Uso de android.hardware.camera2
- Detectar la carpeta de la cámara Android
@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; } }
- Cámara Android2 toque para enfocar
- Configuración de la API de la cámara Android en ISO?
- Procesamiento de vídeo en Android
- Reconocimiento de la cara de la cámara
- Cómo unir png con alpha / transparencia en un marco en tiempo real
- ¿Por qué se rota una imagen capturada con la intención de la cámara en algunos dispositivos de Android?
- Android Moto X 4.2.2 Cámara FaceDetectionListener onFaceDetection () nunca llamado
- Error de liberación de la cámara Android desde PreviewCallback
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 mostrar Snackbar sobre Bottombar?
- Cómo habilitar arrastrar y soltar en el elemento de GridView onClick ()