¿Es posible tener permisos "opcionales" en Android?

¿Hay alguna forma de que una aplicación de Android declare los permisos solicitados como opcionales?

Es decir, quiero escribir una aplicación que solicite un conjunto de permisos, por ejemplo, uno de ellos es el acceso a los contactos del usuario. Ahora la aplicación puede trabajar y hacer cosas útiles sin este permiso de acceso, pero puede hacer más si se concede.

¿Hay una manera para y la aplicación para decir "Quiero permiso X, pero se puede rechazar en cuyo caso estoy feliz de ejecutar con funcionalidad reducida?"

No lo creo, ya que los permisos se establecen en el manifiesto y se aceptan por el usuario al instalar el .apk. Usted podría construir una versión ligera de la aplicación con permisos reducidos y un conjunto limitado de funciones y ofrecerlo como una alternativa.

No está soportado y no está en desarrollo a partir de ahora. Star emite 6266 en el rastreador de errores de Android si desea verlo implementado.

Ref: http://code.google.com/p/android/issues/detail?id=6266

Es posible conceder privilegios a una aplicación ya instalada al no solicitar los permisos en la aplicación "principal" y crear otra aplicación ("stub") usando el mismo android:sharedUserId , que solicita las características. A continuación, puede comprobar si la aplicación stub de permiso se ha instalado comprobando si

 context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED 

Se evalúa como true (con el contexto como un contexto válido y el permiso como una de las cadenas de permisos). Si es cierto, su aplicación de stub se ha instalado y puede desbloquear funciones que requieren los permisos concedidos. Si es falso, simplemente vuelve a las características básicas.

Al diseñar tu aplicación de esa manera puedes volver a introducir fácilmente los permisos opcionales en el apk principal sin tener que cambiar ningún código, por ejemplo si distribuyes varias versiones.

Ahora puede consultar privilegios desde el usuario activando la instalación de (una de) su (s) aplicación (es) stub. Así que si sus privilegios son necesarios después de que algún usuario ingrese en una actividad, inicie el apk para que aparezca si el privilegio no se ha concedido (por supuesto, puede poner una actividad explicativa delante de ella) y ejecutar la función al volver de El administrador del paquete o cuando el permiso se concedió antes. También puede poner la opción para habilitar o deshabilitar permisos en algún lugar de sus preferencias o un diálogo de firstrun.

Para personas perezosas (como yo) un breve resumen sobre cómo llevar el instalador del paquete: Crear una Intent usando Intent.ACTION_VIEW para un file:// -URI usando el tipo "application/vnd.android.package-archive" . Los recursos y recursos no funcionan directamente, por ejemplo, puede agruparlo como recurso y copiarlo en la carpeta de caché o similar.


Advertencia: Es posible que esta respuesta no cumpla con los toS de Google Play, ya que este método tiene algunos problemas de desinstalación (puede que se produzcan pérdidas de aplicaciones, véase más adelante), especialmente cuando se desinstala mediante mecanismos de terceros (como Google Play, ya que el usuario no ve las aplicaciones de ayuda) Utilizando estos métodos) y como privilegios opcionales no se puede mostrar en la tienda de juegos afaik.

Para los problemas de desinstalación que recomiendo utilizar nombres como "MyApp: XXX permisos", dado el nombre de la aplicación es "MyApp", por lo que el usuario puede eliminar fácilmente todos en listas alfabéticamente. Alternativamente, si puede vivir con las aplicaciones de stub cada vez más complejas, utilice ACTION_PACKAGE_REMOVED como se menciona aquí .

  • ¿Pueden las aplicaciones de Android solicitar permisos adicionales en tiempo de ejecución?
  • ¿Por qué se rechazan estos permisos?
  • Adb remount permiso denegado, pero capaz de acceder a superusuario en shell - android
  • ¿Cómo inhabilitar a Google para solicitar permiso para revisar regularmente las aplicaciones instaladas en mi teléfono?
  • ¿Puede un Servicio de Android tener permisos múltiples?
  • No se conceden permisos en el emulador de Android
  • Permiso de denegación: ... requiere android.permission.WRITE_EXTERNAL_STORAGE
  • ¿Cómo hacer que el permiso de gps sea opcional?
  • ¿Cómo conceder permiso para la aplicación que se descarga desde la tienda de juegos?
  • XML Lista de permisos de Android completa
  • Error al usar StatusBarManagerService - java.lang.SecurityException en android.permission.STATUS_BAR_SERVICE
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.