2010-11-21 97 views
25

我正在尝试获取有效的Android权限列表。我知道在http://developer.android.com/reference/android/Manifest.permission.html'官方'的,但似乎有更多的。我在哪里可以获得Android权限列表

例如

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 

我在哪里可以得到这样的名单?我在哪里获得这些权限的描述?

+0

http://developer.android.com/reference/android/Manifest.permission.html – cprcrack 2013-12-14 04:00:17

+19

@cprcrack哇,你已经成功地发布一个链接,该链接已经在这个问题 - 3年后! – Scolytus 2013-12-14 09:53:52

+1

好吧,我感到很傻,我在这里有很多标签,我认为链接不在这里。但是,顺便说一下,3年后这个问题并不重要,这个问题不仅适用于你,而且适用于任何时候在这里结束的所有人;) – cprcrack 2013-12-14 14:25:23

回答

14

有没有这样的事情作为一个全面的“列表”的所有权限。新的权限可以由任何想要执行自己的应用程序来定义:https://developer.android.com/guide/topics/security/security.html#declaring

Manifest.permission类列出了“系统”权限,并且您已经知道这些权限。您列出的其他内容不是系统权限,而是特定于某些应用程序,或者是旧名称(例如ACCESS_LOCATION和ACCESS_GPS是1.0之前的名称)。

源代码中的类似<permission android:name=的grep会显示所有包含的应用程序权限(对于开放源代码应用程序),但通常您应该遵守记录的权限名称。

4

我在哪里可以得到这样的清单?

你不行。

我在哪里可以获得这些权限的说明?

无论那些权限被记录在案。在许多情况下,它们是无证的,因此不应使用。

例如,几年前您的前三名已从Android移除,IIRC。最后一个记录在C2DM documentation

12

使用下面的代码片段,让您的设备上声明的所有权限:

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

嗨当​​我编码的代码,然后显示errors.there说得到清单文件的所有权限。这是最好的方式? – Maidul 2012-08-11 05:35:06

+0

@Maidul你能解释一下你得到的错误吗? – 2012-08-12 07:18:03

+0

@NirPear嗨,我用你的代码在“银河注”和日志显示android.permission.NFC和这个设备没有NFC。我需要为设备获得正确的权限。你知道我能做到吗?谢谢。 – htafoya 2013-04-10 22:39:12

20

adb shell pm list permissions -s

这可能是你在找什么。

+2

也尝试没有'-s' – cprcrack 2013-12-14 04:33:08

+0

我是否正确假设:-)“adb shell pm list features”会列出连接设备的功能? – ferdil 2014-03-05 16:43:23

+0

@ferdil是的,你是正确的:) – 2014-06-27 09:48:05

4

要列出所有权限您的手机

adb shell pm list permissions -g 

上的-s参数是一个简短的总结

+0

出于某种原因-g比没有它 – 2013-09-02 12:26:24

+0

@PhilippeGirolami实际上返回更多的权限,那就是即使什么它应该做的就是将它们分组:http://developer.android.com/tools/help/adb.html – 2014-08-29 16:27:39

4

肯定有“更多的权限,在那里”。 reference you've linked只是“官方名单” - 即使如此,它也不完整。我已经研究了现有权限,它们的用途以及它们对最终用户的影响,大约一年之后 - 我真的很想知道开发人员是如何找到他们需要的。良好的猜测似乎是其中的一部分,因为许多Google搜索权限已经获得了几个应用程序'Manifest文件(“使用...”)的内容。

除此之外,在“官方权限”(或者说“Android核心权限”)旁边,每个开发者都可以为自己的应用定义自己的专属权限(Charlie Collins已在his answer中指出)。

在我的研究过程中,我已经从几个来源(我列出的)中找到了我的发现列表 - 添加了我可以找到的任何解释。该列表主要关注最终用户,但仍然可能对开发人员有所帮助。您可以在my siteAndroid Permissions explained - 双语(英语和德语)找到它。该列表包括“核心权限”以及一些选定的特定应用程序(主要是那些遭遇更频繁的应用程序:Google应用程序声明的或热门应用程序,如TaskerK-9 Mail)。同样,这当然还远远没有完成 - 一个“完整列表”和独角兽一样可能(发布的那一天它最有可能已经过时了)。


编辑:

正如在其他评论问:如果您安装了任何名单尚未覆盖的一个权限的包,你想知道的“技术命名”新许可,您可以通过ADB检索设备信息:

adb shell dumpsys package com.foo.bar 

(当然与包任务的名称替换com.foo.bar离子)。在输出中,跳至行grantedPermissions:。以下是“完整符号”中的权限,例如android.permission.INTERNET,每行一个。为了更轻松:

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

您可以使用下面的代码可以得到一个设备上的所有权限:

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

我知道这是一个迟到的帖子,但这更多的是对人的引用未来谁有同样的问题。

Here是内置权限在Android 7.0(牛轧糖)中的每一个单一列表。但是,它可能创建您自己的权限,以便该列表不包含所有这些。

希望帮助:)

+1

无诸如“迟到”的帖子:) – 2017-11-30 22:40:48

相关问题