我正在尝试获取有效的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
我在哪里可以获得这样的清单?我在哪里获得这些权限的描述?
答案 0 :(得分:21)
adb shell pm list permissions -s
这可能就是你要找的东西。
答案 1 :(得分:14)
对于所有权限,没有全面的“列表”。任何想要强制执行自己的应用程序的新权限都可以定义:https://developer.android.com/guide/topics/security/security.html#declaring。
Manifest.permission
类列出了“系统”权限,您已经了解这些权限。您列出的其他内容不是系统权限,而是特定于某些应用程序,或者是旧名称(例如,ACCESS_LOCATION和ACCESS_GPS是1.0之前的名称)。
源代码中<permission android:name=
之类的grep会显示所有包含的应用程序权限(对于开源应用程序),但一般来说,您应该坚持使用已记录的权限名称。
答案 2 :(得分: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();
}
}
答案 3 :(得分:5)
列出手机上的所有权限
adb shell pm list permissions -g
-s参数是一个简短的摘要
答案 4 :(得分:4)
我在哪里可以获得这样的清单?
你不能。
我从哪里获得这些权限的说明?
记录这些权限的任何位置。在许多情况下,它们没有证件,因此不应使用。
例如,您的前三个在几年前从Android中删除了,IIRC。最后一个记录在C2DM documentation。
中答案 5 :(得分:4)
肯定有更多的权限和#34;。 reference you've linked只是&#34;官方列表&#34; - 甚至为此,它还不完整。我已经研究了现有的权限,它们的用途,以及它们对最终用户的影响,大约一年了 - 真的很想知道开发人员如何找到他们需要的东西。好的猜测似乎是它的一部分,因为许多权限,谷歌搜索只是产生了几个应用程序的内容&#39; Manifest
个文件(&#34;使用...&#34;)。
除此之外,还有&#34;官方权限&#34; (或者更确切地说,&#34; Android核心权限&#34;),每个开发人员都可以为他的应用定义自己的应用(Charlie Collins已经指出his answer)。
在我的研究过程中,我设置了一个列表,其中列出了我从几个来源(我列出的)中的调查结果 - 添加了我能找到的任何解释。此列表主要关注最终用户,但仍可能对开发人员有所帮助。您可以在my site找到它:Android Permissions explained - 双语(英语和德语)。该列表包括&#34;核心权限&#34;以及一些特定于应用程序的应用程序(主要是那些经常遇到的:由Google应用程序声明,或者流行的应用程序,如 Tasker 和 K-9 Mail )。同样,这当然远非完整 - 一个完整的清单&#34;和独角兽一样可能(发布的那天很可能已经过时了)。
修改强>
正如其他评论中所要求的那样:如果您安装了一个包含 new 权限的软件包,但任何列表尚未涵盖,并且您想知道&#34;技术名称&#34;在新的权限中,您可以通过ADB从您的设备中检索该信息:
adb shell dumpsys package com.foo.bar
(当然用相关包的名称替换com.foo.bar
)。在输出中,向下跳到第grantedPermissions:
行。下面是&#34;完整符号&#34;中的权限,例如android.permission.INTERNET
,每行一个。为了更容易:
adb shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:"
答案 6 :(得分: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;
}
答案 7 :(得分:2)
我知道这是一个迟到的帖子,但对于将来有相同问题的人来说,这更像是一个参考。
Here是Android 7.0(Nougat)中每个内置权限的列表。但是, 可以创建自己的权限,因此该列表不包含所有权限。
希望有所帮助:)