Android: permisos de cámara negados sin preguntar

Yo estaba corriendo en problemas con el proceso manual detrás de la solicitud de permisos (simplemente cayó en el código "denegado"), así que cambié a usar Dexter para simplificar. Implementé el siguiente código en onCreate (), e hice una nueva instalación de la aplicación:

Dexter.withActivity(this) .withPermission(Manifest.permission.CAMERA) .withListener(new PermissionListener() { @Override public void onPermissionGranted(PermissionGrantedResponse response) { Log.d(TAG, "GRANTED!"); initCamera(); } @Override public void onPermissionDenied(PermissionDeniedResponse response) { Log.d(TAG, "DENIED!"); } @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) { Log.d(TAG, "PERMISSION RATIONAL SHOULD BE SHOWN!"); } }).check(); 

Inmediatamente cae en el "NEGADO!" Log, y ni siquiera me pide. He intentado este código en particular para intentar múltiples permisos (que es lo que tengo que hacer):

 Dexter.withActivity(activity) .withPermissions(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE) .withListener(new MultiplePermissionsListener() { @Override public void onPermissionsChecked(MultiplePermissionsReport report) { Log.d(TAG, "Accepted: " + report.getGrantedPermissionResponses().size() + " | Denied: " + report.getDeniedPermissionResponses().get(0).getPermissionName()); } @Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) { Log.d(TAG, "continuing permissions request.."); token.continuePermissionRequest(); } }) .check(); 

Pide permisos para Grabar audio, luego pregunta sobre el acceso a fotos / medios / archivos en el dispositivo (nunca pregunta acerca de la cámara). Luego, una vez hecho esto, se imprime el registro: "Aceptado 3 | Denegado: android.permission.CAMERA". Lo niega sin siquiera me incitar de nuevo.

Mi Manifiesto está configurado correctamente para tener la CÁMARA en el lugar apropiado (fuera de la etiqueta 'aplicación'). Vea a continuación para referencia:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my.app"> <uses-feature android:name="android.hardware.camera" android:required="true" /> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> etc.. 

Lo curioso es que cuando entro en Configuración> Aplicaciones> MyApp, la opción Cámara ni siquiera se muestra allí.

No creo que sea un problema con Dexter, ya que está haciendo básicamente lo mismo cuando lo configuro manualmente (y confirmé que definitivamente está configurado correctamente en ese caso después de mirar unos cuantos posts SO).

¿Alguna idea sobre lo que el problema podría estar aquí? FYI – Estoy usando un Galaxy S6, OS 6.0.2. Los otros usuarios que experimentan esto parecen ser otros dispositivos con sistema operativo 6.0+. ¡Gracias por adelantado!

EDIT: Prueba de varios dispositivos, funciona en algunos y no funciona en algunos:

  • Moto X (OS 5.0) – Roto
  • Nexus 5 (OS 7.0) – Trabajos
  • Samsung S6 (OS 6.0.1) – roto
  • Broken Moto X (OS 6.0) – Obras

No parece ser un patrón sólido. Definitivamente extraño. También comencé un nuevo proyecto y funcioné con el mismo código – funcionó bien y permitió el acceso a mi cámara. Por lo tanto, no parece ser totalmente específico del dispositivo.

El problema con esto resultó ser una biblioteca de terceros, que tenía esta línea en su Manifiesto, sobrepasando nuestro propio permiso:

 <uses-permission android:name="android.permission.CAMERA" tools:node="remove" /> 

La solución era importar manualmente su proyecto como un módulo (en lugar de utilizar gradle), y luego comentar esa línea, O más simple: puede agregar "tools: node =" replace "" al final de la CAMERA del proyecto principal Línea de permiso, y funciona bien después de eso; No es necesario importar el proyecto con este último enfoque.

Lo que necesita son los permisos nativos de tiempo de ejecución no dexter, a partir de Android 6.0 (API nivel 23), los usuarios conceden permisos a las aplicaciones mientras se ejecuta la aplicación, no cuando instalan la aplicación. Este enfoque agiliza el proceso de instalación de la aplicación, ya que el usuario no necesita conceder permisos cuando instala o actualiza la aplicación. También le da al usuario más control sobre la funcionalidad de la aplicación; Por ejemplo, un usuario puede elegir dar acceso a una cámara a la cámara, pero no a la ubicación del dispositivo. El usuario puede revocar los permisos en cualquier momento, accediendo a la pantalla Configuración de la aplicación.

// Assume thisActivity is the current activity int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.YOUR_PERMISSION);

Entonces lo que usted necesita es solicitar un cierto permiso si ese cheque es falso,

  ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.YOUR_PERMISSION}, MY_PERMISSION_CODE); 

Desnudo en el ind que usted necesita también declararlos también en el manifiesto, basado en lo que usted ha demostrado todavía que fue hecho ya. Para obtener más información .

  • Captura de video V4L2 en android
  • Desafortunadamente, la cámara ha parado
  • Las imágenes con la API de Camera2 son realmente oscuras
  • ¿Cómo obtener 720p Android Camera Preview Data?
  • Android - comprimir mapa de bits antes de guardarlo en SDCARD en actividad para obtener resultados
  • ¿Cómo implementar la funcionalidad de la cámara con opciones adicionales (como Panorama)?
  • Problema de reconocimiento de color de la cámara de vídeo Nexus 7
  • ¿Leer Byte Array desde la vista de la superficie?
  • actualiza la galería de imágenes de Android con el nuevo mapa de bits
  • Formato de grabación de vídeo (.3gp o mp4) en android?
  • Camera2 api convertir yuv420 a rgb verde hacia fuera
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.