代码之家  ›  专栏  ›  技术社区  ›  Scolytus

在哪里可以获得Android权限列表

  •  25
  • Scolytus  · 技术社区  · 14 年前

    我正在尝试获取有效的Android权限列表。我知道“官方”在 http://developer.android.com/reference/android/Manifest.permission.html 但似乎还有更多的。

    例如

    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
    

    我在哪里能得到这样一份名单?在哪里可以获得这些权限的说明?

    8 回复  |  直到 14 年前
        1
  •  14
  •   Vadim Kotov First Zero    7 年前

    对于所有权限都没有一个全面的“列表”。新权限可以由任何要强制其自身权限的应用程序定义: https://developer.android.com/guide/topics/security/security.html#declaring .

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

    一个grep的意思是 <permission android:name= 在源代码中会显示所有包含的应用程序权限(对于开放源代码应用程序),但一般情况下,您应该坚持使用文档中的权限名称。

        2
  •  21
  •   mkozak    13 年前

    adb shell pm list permissions -s

    这可能就是你要找的。

        3
  •  12
  •   Nir Pear    13 年前

    使用以下代码段获取设备上声明的所有权限:

    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();
        }
    }
    
        4
  •  5
  •   Stephen Donecker    12 年前

    列出手机上的所有权限

    adb shell pm list permissions -g
    

    s参数是一个简短的总结

        5
  •  4
  •   CommonsWare    14 年前

    我在哪里能得到这样一份名单?

    你不能。

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

    记录这些权限的位置。在许多情况下,它们是未经记录的,因此不应使用。

    例如,你的前三个已经在几年前从Android中删除了,IIRC。最后一个记录在 C2DM documentation .

        6
  •  4
  •   Community CDub    8 年前

    当然还有“更多的权限”。这个 reference you've linked 只是“官方名单”而已——即便如此,它也相当不完整。我已经研究了现有的权限,它们是什么,以及它们对最终用户有什么影响,大约一年了,真的不知道开发者是如何找到他们需要的。很好的猜测似乎是其中的一部分,因为对于许多权限,谷歌搜索只产生了几个应用程序的内容 Manifest 文件(“使用”)。

    除此之外,在“官方权限”(或者更确切地说是“Android核心权限”)旁边,每个开发人员都可以为自己的应用程序定义自己的权限(如 Charlie Collins 已经指出了 his answer ).

    在我的研究过程中,我建立了一个列表,其中列出了我从多个来源(我也列出了这些来源)得到的发现,并添加了我能找到的任何解释。这个列表非常关注最终用户,但仍然可能对开发人员有帮助。你可以在 my site : Android Permissions explained –双语(英语和德语)。该列表包括“核心权限”和一些特定于应用程序的权限(主要是那些更频繁遇到的权限:由谷歌应用程序声明的权限,或者像 任务者 K-9邮件 ). 同样,这当然还远远不够完整——一个“完整的列表”很可能像独角兽一样(最有可能公布的那一天已经过时了)。


    编辑:

    正如在另一条评论中所要求的:如果您安装了一个带有 新的 权限尚未包含在任何列表中,如果您想知道该新权限的“技术名称”,可以通过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:"
    
        7
  •  2
  •   Jared Rummler mehmoodnisar125    9 年前

    您可以使用以下代码获取设备上的所有权限:

    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;
    }
    
        8
  •  2
  •   Aaron Esau    8 年前

    我知道这是一个很晚的帖子,但这更多的是给将来有同样问题的人一个参考。

    Here 是每个人的名单 内置 Android 7.0(Nougat)中的权限。然而,它 可以创建自己的权限,这样列表就不会包含所有权限。

    希望有帮助:)