2011-04-19 13 views
18

¿Hay alguna forma de que una aplicación de Android declare los permisos solicitados como opcionales?¿Es posible tener permisos "opcionales" en Android?

I.e. Quiero escribir una aplicación que solicite un conjunto de permisos, p. uno de ellos es el acceso a los contactos del usuario. Ahora la aplicación puede funcionar y hacer cosas útiles sin este permiso de acceso, pero puede hacer más si se concede.

¿Hay alguna manera para que la aplicación diga "Deseo el permiso X, pero puede rechazarlo, en cuyo caso me complace ejecutarlo con una funcionalidad reducida?"

+1

No ............. –

Respuesta

9

No lo creo, ya que los permisos se establecen en el manifiesto y son aceptados por el usuario al instalar el archivo .apk. Puede crear una versión ligera de la aplicación con permisos reducidos y un conjunto limitado de características y ofrecerla como alternativa.

+1

Sin embargo, esta respuesta puede ayudar: http://stackoverflow.com/questions/9299993/optional-permissions-so-an-app-can-show -on-all-devices-and-enable-optional-featu –

+0

también verifique esto http://www.londatiga.net/it/programming/android/solution-to-make-an-android-app-visible-to- all-devices-in-google-play-when-using-specific-feature-2/para más información sobre cómo usar la función y el permiso –

+0

Creo que esta respuesta ya no es válida: https://developer.android.com/ training/permissions/requesting.html – bvdb

5

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

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

+0

Noto que el problema 6266 se ha cerrado como obsoleto. No tengo claro por qué, dado que el tema es tan pertinente como siempre, que yo sepa. –

5

Es posible conceder privilegios a una aplicación ya instalada por no solicitar los permisos de la aplicación "principal" y mediante la creación de otra aplicación ("stub") utilizando el mismo android:sharedUserId, que solicita Las características. A continuación, puede comprobar si la aplicación de permiso-talón se ha instalado comprobando si

context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED 

se evalúa como verdadera (con el contexto como un contexto válido y permiso como una de las series de permiso). Si es verdad, su aplicación de código auxiliar se ha instalado y usted puede desbloquear funciones que requieren los permisos concedidos. Si es falso, simplemente vuelve a las características básicas.

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

Ahora puede consultar los privilegios del usuario activando la instalación de (uno de) su (s) stub (s) aplicación (es). Por lo tanto, si sus privilegios son necesarios después de la entrada de algún usuario en una actividad, inicie la aplicación para que aparezca si no se le ha otorgado el privilegio (por supuesto, puede colocar una actividad explicativa delante) y ejecute la función cuando regrese de ella. el administrador del paquete o cuando el permiso fue otorgado antes. También puede colocar la opción para habilitar o deshabilitar permisos en algún lugar de sus preferencias o en un primer cuadro de diálogo.

Para los perezosos (como yo) un breve resumen sobre cómo llevar el instalador del paquete: Crear una Intent usando Intent.ACTION_VIEW para un file:// -uri utilizando el Tipo "application/vnd.android.package-archive". Los activos y los recursos no funcionan directamente, por ejemplo, puedes agruparlos como activos y copiarlos en la carpeta de caché o similar.


Advertencia: Esta respuesta podría no cumplir con la aplicación Google Play ToS, ya que este método tiene algunos problemas de desinstalación (pueda filtrarse aplicaciones, ver más abajo) EXPECIALLY al desinstalar a través de mecanismos de terceros (como Google Play, ya que el usuario no ve las aplicaciones de ayuda usando estos métodos) y como privilegios opcionales no se pueden mostrar en la tienda de juegos afaik.

Para los problemas de desinstalación, recomiendo usar nombres como "MyApp: permisos XXX", dado que el nombre de la aplicación es "MyApp", por lo que el usuario puede eliminarlos fácilmente en listas alfabéticamente listadas.Alternativamente, si puede vivir con las aplicaciones de stub cada vez más complejas, use ACTION_PACKAGE_REMOVED as mentioned here.

+0

buen consejo! aquí una demostración de ello en acción https://www.youtube.com/watch?v=u7bDg8EMEFM - código aquí https://github.com/ligi/AJShA – ligi

+0

Pregunta relacionada con la interfaz de usuario para este modelo de "complemento" : [¿Los usuarios comprenderían dividir la funcionalidad de una aplicación de Android con permiso?] (Https://ux.stackexchange.com/q/76183/40840) –

+0

@tepples No creo que el usuario realmente entienda que es una aplicación separada (a menos que el usuario entienda todo), pero como dije en la respuesta, es poco probable que este método sea aceptado en las tiendas de aplicaciones. También tenga en cuenta que Android 6 admite algún tipo de permiso opcional, esta respuesta es bastante antigua. Yo, sin embargo, aún no he usado suficiente, así que todavía no puedo dar una buena respuesta "nueva" :) – dst

Cuestiones relacionadas