2010-11-21 11 views
25

Estoy tratando de obtener una lista de permisos de Android válidos. Conozco los 'oficiales' en http://developer.android.com/reference/android/Manifest.permission.html pero parece que hay más por ahí.Dónde puedo obtener una lista de permisos de Android

Por ejemplo

android.permission.READ_SETTINGS 
android.permission.ACCESS_LOCATION 
android.permission.ACCESS_GPS 

com.android.vending.CHECK_LICENSE 

com.android.browser.permission.READ_HISTORY_BOOKMARKS 
com.android.browser.permission.WRITE_HISTORY_BOOKMARKS 

com.google.android.googleapps.permission.GOOGLE_AUTH 
com.google.android.googleapps.permission.GOOGLE_AUTH.OTHER_SERVICES 

com.google.android.c2dm.permission.RECEIVE 

¿Dónde puedo obtener una lista de este tipo? ¿Dónde obtengo una descripción de estos permisos?

+0

http://developer.android.com/reference/android/Manifest.permission.html – cprcrack

+19

@cprcrack Vaya, que ha logrado publicar un enlace que ya está en la pregunta - ¡Despues de 3 años! – Scolytus

+1

Bueno, me siento tonto, tenía muchas pestañas aquí y pensé que el enlace no estaba aquí. Pero, por cierto, no importa si es después de 3 años, esta pregunta no es solo para ti, sino para todos los que terminan aquí en cualquier momento;) – cprcrack

Respuesta

14

No existe una "lista" completa para todos los permisos. Los nuevos permisos pueden ser definidos por cualquier aplicación que quiera aplicar su propio: https://developer.android.com/guide/topics/security/security.html#declaring.

La clase Manifest.permission enumera los permisos del "sistema", y ya los conoce. Las otras cosas que ha enumerado no son permisos del sistema, sino que son específicas de ciertas aplicaciones y/o son nombres antiguos (ACCESS_LOCATION y ACCESS_GPS eran nombres pre 1.0, por ejemplo).

Un grep para algo como <permission android:name= en la fuente revelaría todos los permisos de la aplicación incluidos (para las aplicaciones de código abierto), pero en general debe apegarse a los nombres de permisos documentados.

4

¿Dónde puedo obtener una lista?

No puede.

¿Dónde puedo obtener una descripción de estos permisos?

Dondequiera que se documenten esos permisos. En muchos casos, no están documentados y, por lo tanto, no deben utilizarse.

Por ejemplo, sus primeros tres fueron eliminados de Android hace un par de años, IIRC. El último está documentado en el C2DM documentation.

12

Utilice el siguiente fragmento de obtener todos los permisos declarados en su dispositivo:

Context context = this; 
PackageManager pm = context.getPackageManager(); 
CharSequence csPermissionGroupLabel; 
CharSequence csPermissionLabel; 

List<PermissionGroupInfo> lstGroups = pm.getAllPermissionGroups(0); 
for (PermissionGroupInfo pgi : lstGroups) { 
    csPermissionGroupLabel = pgi.loadLabel(pm); 
    Log.e("perm", pgi.name + ": " + csPermissionGroupLabel.toString()); 

    try { 
     List<PermissionInfo> lstPermissions = pm.queryPermissionsByGroup(pgi.name, 0); 
     for (PermissionInfo pi : lstPermissions) { 
      csPermissionLabel = pi.loadLabel(pm); 
      Log.e("perm", " " + pi.name + ": " + csPermissionLabel.toString()); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
+0

Hola Cuando estoy codificando mi código, entonces muestro errores. Allí dije obtener todos los permisos en el archivo de manifiesto. ¿Es esta la mejor manera? – Maidul

+0

@Maidul ¿Puede explicar qué errores está recibiendo? –

+0

@NirPear Hola, utilicé su código en una "Nota Galaxy" y el registro muestra android.permission.NFC y este dispositivo no tiene NFC. Necesito obtener los permisos correctos para el dispositivo. ¿Sabes cómo puedo hacer esto? Gracias. – htafoya

20

adb shell pm list permissions -s

Esto podría ser lo que estás buscando.

+2

También intente sin '-s' – cprcrack

+0

¿Estoy en lo correcto al asumir :-) que las" funciones de la lista pm shell adb "mostrarían las características del dispositivo conectado? – ferdil

+0

@ferdil Sí, está en lo correcto :) –

4

para listar todos los permisos en su teléfono

adb shell pm list permissions -g 

El argumento -s es un breve resumen

+0

Por alguna razón -g devuelve más permisos que sin él –

+0

@PhilippeGirolami De hecho, y eso a pesar de lo que se supone que debe hacer es simplemente agruparlos: http://developer.android.com/tools/help/adb.html –

4

Definitivamente, hay "más permisos por ahí". El reference you've linked es solo la "lista oficial", e incluso para eso, es bastante incompleto. Investigué los permisos existentes, para qué sirven y qué impactos tienen en el usuario final, desde hace aproximadamente un año, y realmente me pregunto cómo los desarrolladores encuentran lo que necesitan. Las buenas suposiciones parecen ser parte de esto, ya que para muchos permisos, una búsqueda en Google solo arrojó contenido de varios archivos de aplicaciones Manifest ("usa ...").

Añadido a esto, al lado de los "permisos oficiales" (o más bien "permisos básicos Android"), cada desarrollador puede definir su propia para su aplicación (como ya se ha señalado Charlie Collins en his answer).

Durante mi investigación, he configurado una lista con mis hallazgos de varias fuentes (que mencioné a lo largo) - agregando cualquier explicación que pude encontrar. Esta lista está más bien enfocada en el usuario final, pero aún puede ser útil para los desarrolladores. Puede encontrarlo en my site: Android Permissions explained - bilingüe (inglés y alemán). La lista incluye el "permiso central" y algunas aplicaciones específicas (principalmente aquellas que se encuentran con más frecuencia: declaradas por las aplicaciones de Google o populares como Tasker y Correo K-9). Una vez más, esto, por supuesto, está lejos de ser completo: una "lista completa" es tan probable como un unicornio (el día que se publicó probablemente ya esté desactualizado).


Editar:

Como se pidió en otro comentario: Si ha instalado un paquete con un permiso nueva aún no están cubiertas por ninguna lista, y que desea conocer la "técnica nombre" de esa nueva autorización, puede recuperar esa información de su dispositivo a través de ADB:

adb shell dumpsys package com.foo.bar 

(por supuesto sustituir com.foo.bar con el nombre del paquete en la búsqueda ion). En la salida, salte a la línea grantedPermissions:. Debajo, aparecen los permisos en "notación completa", p. android.permission.INTERNET, uno por línea. Para facilitarlo:

adb shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:" 
2

Usted puede obtener todos los permisos en un dispositivo usando el siguiente código:

public static List<PermissionInfo> getAllPermissions(Context context) { 
    PackageManager pm = context.getPackageManager(); 
    List<PermissionInfo> permissions = new ArrayList<>(); 

    List<PermissionGroupInfo> groupList = pm.getAllPermissionGroups(0); 
    groupList.add(null); // ungrouped permissions 

    for (PermissionGroupInfo permissionGroup : groupList) { 
     String name = permissionGroup == null ? null : permissionGroup.name; 
     try { 
      permissions.addAll(pm.queryPermissionsByGroup(name, 0)); 
     } catch (PackageManager.NameNotFoundException ignored) { 
     } 
    } 

    return permissions; 
} 
2

Sé que esto es un post tarde, pero esto es más de una referencia para las personas en el futuro que tiene la misma pregunta.

Here es una lista de cada uno incorporado permiso en Android 7.0 (Nougat). Sin embargo, es es posible crear sus propios permisos, por lo que esa lista no contiene todos ellos por ahí.

Espero que ayude :)

+1

No tal cosa como una publicación "tardía" :) –

Cuestiones relacionadas