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

我在哪里可以获得Android权限列表,android,android-manifest,Android,Android Manifest,我正在尝试获取有效的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

我正在尝试获取有效的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
我在哪里可以得到这样的清单?从何处获取这些权限的描述

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

你不能

从何处获取这些权限的描述

无论这些权限记录在何处。在许多情况下,它们是无文件记录的,因此不应使用


例如,你的前三个在几年前就从Android上删除了,IIRC。最后一个记录在中。

没有一个全面的“列表”来列出所有权限。任何希望强制其自身权限的应用程序都可以定义新权限:

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


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

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();
    }
}
Context=this;
PackageManager pm=context.getPackageManager();
字符序列csPermissionGroupLabel;
字符序列csPermissionLabel;
List lstGroups=pm.getAllPermissionGroups(0);
对于(PermissionGroupInfo pgi:lstGroups){
csPermissionGroupLabel=pgi.loadLabel(pm);
Log.e(“perm”,pgi.name+:“+csPermissionGroupLabel.toString());
试一试{
List lstPermissions=pm.queryPermissionsByGroup(pgi.name,0);
for(PermissionInfo pi:lstpmissions){
csPermissionLabel=pi.loadLabel(pm);
Log.e(“perm”,“+pi.name+”:“+csPermissionLabel.toString());
}
}捕获(例外情况除外){
例如printStackTrace();
}
}

亚行壳牌项目管理列表权限-s


这可能就是您要查找的内容。

列出您手机上的所有权限

adb shell pm list permissions -g
-s参数是一个简短的总结

肯定有“更多的权限”。这只是一份“官方名单”——即使如此,它也相当不完整。我已经研究了大约一年的现有权限、它们的用途以及它们对最终用户的影响——我真的很想知道开发人员是如何找到他们需要的。好的猜测似乎是其中的一部分,因为对于许多权限来说,谷歌搜索只产生了几个应用程序的
清单
文件(“使用…”)的内容

此外,除了“官方权限”(或者更确切地说是“Android核心权限”)之外,每个开发人员都可以为自己的应用程序定义自己的权限(如中所述)

在我的研究过程中,我列出了一个列表,列出了我从多个来源获得的发现(我也列出了这些来源)——添加了我能找到的任何解释。此列表主要关注最终用户,但可能对开发人员有所帮助。您可以在以下网址找到:双语(英语和德语)。该列表包括“核心权限”以及一些选定的特定于应用程序的权限(主要是那些经常遇到的权限:由谷歌应用程序声明的权限,或者像Tasker和K-9 Mail这样的流行应用程序)。当然,这还远远不够完整——一份“完整清单”就像一只独角兽(最有可能公布的那一天已经过时)


编辑:

正如在另一条评论中所要求的那样:如果您安装的软件包具有任何列表中尚未包含的新权限,并且您想知道该新权限的“技术名称”,则可以通过ADB从您的设备检索该信息:

adb shell dumpsys package com.foo.bar
(当然,将
com.foo.bar
替换为有问题的包的名称)。在输出中,跳到
授权权限:
行。下面是“完整符号”中的权限,例如,
android.permission.INTERNET
,每行一个。为了让这更容易:

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

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

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;
}
公共静态列表getAllPermissions(上下文){
PackageManager pm=context.getPackageManager();
列表权限=新建ArrayList();
List groupList=pm.getAllPermissionGroups(0);
groupList.add(null);//取消分组的权限
对于(PermissionGroupInfo permissionGroup:groupList){
字符串名称=permissionGroup==null?null:permissionGroup.name;
试一试{
permissions.addAll(pm.queryPermissionsByGroup(名称,0));
}捕获(PackageManager.NameNotFoundException被忽略){
}
}
返回权限;
}

我知道这是一篇迟发的帖子,但对于将来有同样问题的人来说,这更像是一个参考

是Android 7.0(Nougat)中每个内置权限的列表。但是,您可以创建自己的权限,这样列表就不会包含所有权限


希望这有帮助:)

Hi当我编写代码时,然后显示错误。上面说的是获取清单文件的所有权限。这是最好的方法吗?@NirPear Hi,我在“Galaxy便笺”中使用了你的代码,日志显示android.permission.NFC,而这个设备没有NFC。我需要获得设备的正确权限。你知道我怎么做吗?谢谢。@htafoya我认为它显示了操作系统的所有可用权限,不管您有什么硬件。您缺少的权限不在权限组中。出于某种原因,-g返回的权限比没有的多it@PhilippeGirolami事实上,即使它应该做的只是将它们分组:@cprack-Wow,3年后,你成功地发布了一个已经存在问题的链接!嗯,我觉得很傻,我有很多标签在这里,我认为链接不在这里。但是顺便说一句,不管是在3年后,这个问题不仅对你,而且对任何时候来到这里的每个人都是如此;)很有意思:)也可以试试机智