Где я могу получить список разрешений для Android
Я пытаюсь получить список действительных прав 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
Где я могу получить такой список? Где я могу получить описание этих разрешений?
Ответы
Ответ 1
Нет такой вещи, как полный "список" для всех разрешений. Новые разрешения могут быть определены любым приложением, которое хочет использовать его самостоятельно: https://developer.android.com/guide/topics/security/security.html#declaring.
В классе Manifest.permission
перечислены "системные" разрешения, и вы уже знаете об этом. Остальные вещи, которые вы указали, не являются системными правами, а скорее специфичны для определенных приложений, а также являются старыми именами (например, ACCESS_LOCATION и ACCESS_GPS были именами до 1.0).
grep для чего-то вроде <permission android:name=
в источнике будет раскрывать все включенные разрешения приложений (для приложений с открытым исходным кодом), но в целом вы должны придерживаться имен документированных прав.
Ответ 2
adb shell pm list permissions -s
Это может быть то, что вы ищете.
Ответ 3
Используйте следующий фрагмент, чтобы получить все разрешения, объявленные на вашем устройстве:
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
Где я могу получить такой список?
Вы не можете.
Где я могу получить описание для этих разрешений?
Везде, где эти разрешения документированы. Во многих случаях они недокументированы и поэтому не должны использоваться.
Например, ваши первые три были удалены с Android пару лет назад, IIRC. Последнее описано в документации C2DM.
Ответ 5
Чтобы просмотреть все разрешения на вашем телефоне
adb shell pm list permissions -g
Аргумент -s - краткое описание
Ответ 6
Там определенно "больше разрешений". Ссылка ссылка, которую вы связали, является только "официальным списком" - и даже для этого довольно неполный. Я исследовал существующие разрешения, то, за что они предназначены, и какое влияние они оказывают на конечного пользователя, примерно на год - и действительно интересно, как разработчики находят то, что им нужно. Хорошее угадывание, похоже, является его частью, так как для многих разрешений поиск Google только дал содержание нескольких файлов Manifest
приложений ( "использует..." ).
Добавив к этому, рядом с "официальными разрешениями" (или, скорее, "разрешениями на ядро Android" ), каждый разработчик может определить свой собственный для своего приложения (как Charlie Collins уже указано в его ответе).
Во время моего исследования я установил список с моими результатами из нескольких источников (которые я перечислял вместе) - добавив любые объяснения, которые я мог найти. Этот список скорее ориентирован на конечного пользователя, но может оказаться полезным для разработчиков. Вы можете найти его на мой сайт: "Разрешения для Android" - двуязычный (английский и немецкий). Список включает в себя "основное разрешение", а также некоторые выбранные приложения (в основном те, которые чаще встречаются: объявляются приложениями Google или популярными приложениями, такими как Tasker и K-9 Mail). Опять же, это, конечно, далеко не полное - "полный список", как вероятный, как единорог (опубликованный день, скорее всего, уже устарел).
Edit:
Как было предложено в другом комментарии: если вы установили пакет с новым разрешением, еще не охваченным каким-либо списком, и вы хотите узнать "техническое имя" этого нового разрешения, вы можете получить эту информацию из своего через 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
Вы можете получить все разрешения на устройстве, используя следующий код:
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
Я знаю, что это поздний пост, но это скорее ссылка для людей в будущем, у которых есть тот же вопрос.
Здесь - список всех встроенных разрешений в Android 7.0 (Nougat). Тем не менее, вы можете создать свои собственные разрешения, чтобы список не содержал их всех.
Надеюсь, что помогает:)