Подтвердить что ты не робот

Где я могу получить список разрешений для 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

Где я могу получить такой список? Где я могу получить описание этих разрешений?

4b9b3361

Ответ 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). Тем не менее, вы можете создать свои собственные разрешения, чтобы список не содержал их всех.

Надеюсь, что помогает:)