¿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.

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.

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

introduzca la descripción de la imagen aquí

  • Leer tamaño de fuente desde Configuración
  • Excepción de seguridad al intentar acceder a una imagen de Picasa en un dispositivo que ejecuta 4.2
  • Explorando checkCallingOrSelfPermission () para el ataque de escalado de privilegios
  • La concesión de permisos uri para FileProvider da SecurityException
  • Reproductor de música preguntando para escribir permiso de almacenamiento externo?
  • ¿Cuándo necesito android.hardware.location.gps y android.hardware.location.network?
  • Marshmallow FINE y COARSE permiso de ubicación
  • El permiso de Android 6.0 (Marshmallow) READ_CONTACTS permite leer el nombre del contacto cuando se deniega el permiso
  • Permiso de Marshmallow: Componente Lifecycle
  • Editar o eliminar el permiso de la página de información de la aplicación mientras se instala la aplicación
  • La aplicación de Android no solicita permisos al instalar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.