¿Cómo puedo verificar el permiso bajo el API nivel 23?
Una de mis aplicaciones tiene un permiso RECORD_AUDIO
y la RECORD_AUDIO
mi aplicación es 22. No puedo verificar el permiso en tiempo de ejecución. Pero me doy cuenta si instalo mi aplicación en Android 6.0 o superior. Los usuarios pueden denegar manualmente el permiso en los Ajustes de la aplicación Aplicación de sistema. Así que mi pregunta es ¿cómo puedo comprobar si mi aplicación es gran permiso de audio bajo el nivel API 23?
He buscado bastante tiempo pero sólo encuentro algún documento sobre cómo comprobar el permiso en Android M.
- El programa Bluetooth de Android 6.0 no puede descubrir los dispositivos Bluetooth disponibles
- Ubicación: Permisos de GPS / red: deseado si está disponible
- Permisos de tiempo de ejecución de Android en las versiones de android debajo de M?
- Java.lang.RuntimeException: inicio fallido
- ¿Cómo depurar los permisos de Android 6.0?
He notado que el contexto tiene una función checkCallingOrSelfPermission , pero su comportamiento es extraño bajo Android 6.0. Estoy usando la solución de aquí . Pero después de cerrar manualmente el permiso de aplicación en la configuración de la aplicación de sistema. El resultado que obtuve no es lo que esperaba.
String permission = "android.permission.RECORD_AUDIO"; int ret = context.checkCallingPermission(permission);
Olvídese de mencionar:
minSdkVersion 9 targetSdkVersion 22
Editar:
He notado que hay una solución que es actualizar v4 soporte lib a v23. Será un poco complejo para actualizar mi lib de soporte v4. Así que quiero otra solución.
- La llamada requiere el nivel 23 de API (el min actual es 14): android.app.Activity # requestPermissions, checkSelfPermission
- ¿Cuál es el caso de uso de ContextCompat.checkSelfPermission?
- ¿Pueden solicitar permisos sincrónicamente en el modelo de permisos de ejecución de Android Marshmallow (API 23)?
- ¿Permiso de notificaciones push (GCM) en tiempo de ejecución?
- Cómo corregir Advertencia de pelusa de SMS BroadcastReceiver sin protección
- Android M detecta si el cuadro de diálogo de permisos está visible
- Comprobación del código que utiliza permisos
- Perder el permiso de Notificación de acceso después de reiniciar
En la API 22 y siguientes:
int permission = PermissionChecker.checkSelfPermission(context, permission); if (permission == PermissionChecker.PERMISSION_GRANTED) { // good to go } else { // permission not granted, you decide what to do }
En API 23 y superiores:
De los documentos:
Si su aplicación necesita un permiso peligroso, debe comprobar si tiene permiso cada vez que realiza una operación que requiera ese permiso. El usuario es siempre libre de revocar el permiso, por lo que incluso si la aplicación utiliza la cámara de ayer, no puede asumir que todavía tiene ese permiso de hoy.
Para comprobar si tiene un permiso, llame al método ContextCompat.checkSelfPermission (). Por ejemplo, este fragmento muestra cómo comprobar si la actividad tiene permiso para escribir en el calendario:
// Assume thisActivity is the current activity int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR);
Si la aplicación tiene el permiso, el método devuelve PackageManager.PERMISSION_GRANTED y la aplicación puede continuar con la operación. Si la aplicación no tiene el permiso, el método devuelve PERMISSION_DENIED y la aplicación debe solicitar explícitamente al usuario permiso.
https://developer.android.com/training/permissions/requesting.html
para Api 22 y versiones inferiores, si no estoy equivocado, no necesitas verificar el permiso en tiempo de ejecución, solo tienes que añadirlos en AndroidManifest
y la aplicación solicitará este permiso sólo una vez cuando se instale el primer período. Así que es quizás usted tiene que comprobar su AndroidManifest, puede por favor agregar esto aquí.
En caso de que desee utilizar su aplicación en Api 23, así como versiones inferiores:
Puede intentar utilizar la instrucción if
para comprobar la versión Sdk y solicitar permiso dungerous en tiempo de ejecución si la versión 23 o superior.
if (android.os.Build.VERSION.SDK_INT > 23) { /*Ask Dungerous Permissions here*/ }
y tal vez resolverá el problema en Api 22 y versiones inferiores.
Puede comprobar cómo solicitar permiso en runetime desde Solicitud de permisos en tiempo de ejecución
También tienes que agregar Api 23 compilar a tu aplicación y hacer que tu objetivo a Api 23.
Edit: Ahora veo que ha mencionado que, es complejo para actualizar su soporte de librería a v23, pero no he entendido por qué. Usted necesita instalar apenas algunos SDK y agregar algunas secuencias al gradle. ¿Utilizas algo como la lib de soporte personalizado?
Por favor, vaya a través de este enlace le guiará cómo se establece el permiso y reducir su trabajo para implementar el permiso
Necesita ver los permisos del sistema y solicitar permisos
Ejemplo de Permisos Perigosos y Permisos Especiales https://github.com/henrychuangtw/AndroidRuntimePermission
- Android: las vistas en el componente compuesto personalizado no se inflan (findByView devuelve null)
- ¿Cómo ejecutar APIDemos en el emulador de Android?