1

Android 有不同的权限组和权限。每个权限组代表某些权限。但是我找不到每个组拥有的权限列表。它在任何地方发布吗?

例如。android.permission.ACCOUNT_MANAGER 与权限组 ACCOUNTS 相关联。我需要一份此类关联的列表。

4

4 回答 4

1

这是我在 ICS 上制作的清单。https://docs.google.com/spreadsheet/pub?key=0As7-0Nfn2fUTdEpXdHJIZVlUNWljb1RwTXVtREthSEE&single=true&gid=0&output=html

于 2012-09-20T15:43:11.973 回答
1

Android 权限在此处列出,权限组在此处列出。然后也可以看看PemissionInfo()

于 2012-09-10T12:20:02.683 回答
1

可以使用 PackageManager getAllPermissionGroups() 和 queryPermissionsByGroup() 来枚举整个 Android 权限层次结构。下面的代码在 5.1.1 (SDK 22) 设备上生成了最后显示的输出。标记为“个人”的组具有 groupInfo.flags == 1,并且似乎对应于 Marshmallow 中称为“危险”的权限组。

由于 SDK 级别的差异以及应用程序可以定义自定义权限这一事实,您将在不同的设备上获得不同的权限层次结构。

/**
 * Uses PackageManager getAllPermissionGroups() and queryPermissionsByGroup()
 * to enumerate the Android permission hierarchy.
 */
private void showPermissionTree()
{
    final PackageManager pm = m_context.getPackageManager();
    if (pm == null)
        return;

    /*
     * Get a list of all permission groups and sort them alphabetically.
     * Then add to the end of the list the special case of a null group name. There can be
     * numerous permissions that are not listed under a group name.
     */
    List<PermissionGroupInfo> groupInfoList = pm.getAllPermissionGroups(0);
    if (groupInfoList == null)
        return;

    ArrayList<String> groupNameList = new ArrayList<>();
    for (PermissionGroupInfo groupInfo : groupInfoList) {
        String groupName = groupInfo.name;
        if (groupName != null) {
            if (Build.VERSION.SDK_INT >= 17) {
                /*
                 * SDK 17 added the flags field. If non-zero, the permission group contains
                 * permissions that control access to user personal data.
                 * N.B. These are the permissions groups that are called "dangerous" in
                 * Marshmallow.
                 */
                if (groupInfo.flags != 0) {
                    groupName += " (personal)";
                }
            }
            groupNameList.add(groupName);
        }
    }

    Collections.sort(groupNameList);
    groupNameList.add(null);

    /*
     * Loop though each permission group, adding to the StringBuilder the group name and
     * the list of all permissions under that group.
     */
    StringBuilder sb = new StringBuilder(10000);
    final String INDENT = "   ";

    for (String groupName : groupNameList) {
        if (groupName == null)
            groupName = "null";

        sb.append("* ").append(groupName).append("\n");

        ArrayList<String> permissionNameList = getPermissionsForGroup(groupName);
        if (permissionNameList.size() > 0) {
            for (String permission : permissionNameList) {
                sb.append(INDENT).append(permission).append("\n");
            }
        } else {
            sb.append(INDENT).append("no permissions under group\n");
        }

        sb.append("\n");
    }

    m_textView.setText(sb.toString());
}


/*
 * Gets and returns a list of all permission under the specified group, sorted alphabetically.
 *
 * N.B. groupName can be null. The docs for PackageManager.queryPermissionsByGroup() say
 * "Use null to find all of the permissions not associated with a group."
 */
private ArrayList<String> getPermissionsForGroup(String groupName)
{
    final PackageManager pm = m_context.getPackageManager();
    final ArrayList<String> permissionNameList = new ArrayList<>();

    try {
        List<PermissionInfo> permissionInfoList =
                pm.queryPermissionsByGroup(groupName, PackageManager.GET_META_DATA);
        if (permissionInfoList != null) {
            for (PermissionInfo permInfo : permissionInfoList) {
                String permName = permInfo.name;
                if (permName == null) {
                    permName = "null";
                } else if (permName.isEmpty()) {
                    permName = "empty";
                }
                permissionNameList.add(permName);
            }
        }
    }
    catch (PackageManager.NameNotFoundException e) {
        // e.printStackTrace();
        Log.d(TAG, "permissions not found for group = " + groupName);
    }

    Collections.sort(permissionNameList);

    return permissionNameList;
}

* android.permission-group.ACCESSIBILITY_FEATURES
   组下没有权限

* android.permission-group.ACCOUNTS(个人)
   组下没有权限

* android.permission-group.AFFECTS_BATTERY
   android.permission.CHANGE_WIFI_MULTICAST_STATE
   android.permission.手电筒
   android.permission.TRANSMIT_IR
   android.permission.VIBRATE
   android.permission.WAKE_LOCK

* android.permission-group.APP_INFO
   android.permission.GET_TASKS
   android.permission.KILL_BACKGROUND_PROCESSES
   android.permission.MANAGE_ACTIVITY_STACKS
   android.permission.PERSISTENT_ACTIVITY
   android.permission.REAL_GET_TASKS
   android.permission.RECEIVE_BOOT_COMPLETED
   android.permission.REMOVE_TASKS
   android.permission.REORDER_TASKS
   android.permission.RESTART_PACKAGES

* android.permission-group.AUDIO_SETTINGS
   android.permission.MODIFY_AUDIO_SETTINGS

* android.permission-group.BLUETOOTH_NETWORK
   android.permission.BLUETOOTH
   android.permission.BLUETOOTH_ADMIN
   android.permission.BLUETOOTH_MAP
   android.permission.BLUETOOTH_PRIVILEGED

* android.permission-group.BOOKMARKS(个人)
   组下没有权限

* android.permission-group.CALENDAR(个人)
   组下没有权限

* android.permission-group.CAMERA(个人)
   组下没有权限

* android.permission-group.COST_MONEY
   组下没有权限

* android.permission-group.DEVELOPMENT_TOOLS
   android.permission.ACCESS_ALL_EXTERNAL_STORAGE
   android.permission.CHANGE_CONFIGURATION
   android.permission.DUMP
   android.permission.READ_LOGS
   android.permission.SET_ALWAYS_FINISH
   android.permission.SET_DEBUG_APP
   android.permission.SET_PROCESS_LIMIT
   android.permission.SIGNAL_PERSISTENT_PROCESSES
   android.permission.WRITE_SECURE_SETTINGS
   com.android.chrome.permission.DEBUG

* android.permission-group.DEVICE_ALARMS(个人)
   组下没有权限

* android.permission-group.DISPLAY
   android.permission.SYSTEM_ALERT_WINDOW

* android.permission-group.HARDWARE_CONTROLS
   android.permission.ACCESS_FM_RADIO
   android.permission.ACCESS_MTP
   android.permission.HARDWARE_TEST
   android.permission.MANAGE_USB

* android.permission-group.LOCATION(个人)
   组下没有权限

* android.permission-group.MESSAGES(个人)
   组下没有权限

* android.permission-group.MICROPHONE(个人)
   组下没有权限

* android.permission-group.NETWORK
   android.permission.ACCESS_NETWORK_STATE
   android.permission.ACCESS_WIFI_STATE
   android.permission.ACCESS_WIMAX_STATE
   android.permission.BROADCAST_NETWORK_PRIVILEGED
   android.permission.CHANGE_NETWORK_STATE
   android.permission.CHANGE_WIFI_STATE
   android.permission.CHANGE_WIMAX_STATE
   android.permission.CONNECTIVITY_INTERNAL
   android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
   android.permission.INTERNET
   android.permission.LOOP_RADIO
   android.permission.NFC
   android.permission.READ_WIFI_CREDENTIAL
   android.permission.RECEIVE_DATA_ACTIVITY_CHANGE
   android.permission.SCORE_NETWORKS
   com.android.vending.BILLING
   com.android.vending.CHECK_LICENSE
   com.google.android.c2dm.permission.RECEIVE
   com.google.android.c2dm.permission.SEND
   com.google.android.gtalkservice.permission.SEND_HEARTBEAT
   com.google.android.permission.BROADCAST_DATA_MESSAGE
   com.google.android.xmpp.permission.BROADCAST
   com.google.android.xmpp.permission.SEND_RECEIVE
   com.google.android.xmpp.permission.USE_XMPP_ENDPOINT
   com.google.android.xmpp.permission.XMPP_ENDPOINT_BROADCAST
   com.gsma.services.nfc.permission.TRANSACTION_EVENT

* android.permission-group.PERSONAL_INFO(个人)
   组下没有权限

* android.permission-group.PHONE_CALLS(个人)
   组下没有权限

* android.permission-group.SCREENLOCK(个人)
   组下没有权限

* android.permission-group.SOCIAL_INFO(个人)
   组下没有权限

* android.permission-group.STATUS_BAR
   android.permission.EXPAND_STATUS_BAR

* android.permission-group.STORAGE(个人)
   组下没有权限

* android.permission-group.SYNC_SETTINGS
   android.permission.READ_SYNC_SETTINGS
   android.permission.READ_SYNC_STATS
   android.permission.WRITE_SYNC_SETTINGS

* android.permission-group.SYSTEM_CLOCK
   android.permission.SET_TIME_ZONE

* android.permission-group.SYSTEM_TOOLS
   android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
   android.permission.ACCESS_MOCK_LOCATION
   android.permission.ACCESS_PDB_STATE
   android.permission.ASEC_ACCESS
   android.permission.ASEC_CREATE
   android.permission.ASEC_DESTROY
   android.permission.ASEC_MOUNT_UNMOUNT
   android.permission.ASEC_RENAME
   android.permission.BATTERY_STATS
   android.permission.BLUETOOTH_STACK
   android.permission.BROADCAST_PACKAGE_REMOVED
   android.permission.BROADCAST_STICKY
   android.permission.CHANGE_BACKGROUND_DATA_SETTING
   android.permission.CLEAR_APP_CACHE
   android.permission.DIAGNOSTIC
   android.permission.FORCE_STOP_PACKAGES
   android.permission.GET_APP_OPS_STATS
   android.permission.GET_DETAILED_TASKS
   android.permission.GET_PACKAGE_SIZE
   android.permission.GLOBAL_SEARCH
   android.permission.GLOBAL_SEARCH_CONTROL
   android.permission.INTERACT_ACROSS_USERS
   android.permission.INTERACT_ACROSS_USERS_FULL
   android.permission.MANAGE_USERS
   android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS
   android.permission.MOUNT_FORMAT_FILESYSTEMS
   android.permission.MOUNT_UNMOUNT_FILESYSTEMS
   android.permission.NET_ADMIN
   android.permission.NET_TUNNELING
   android.permission.OEM_UNLOCK_STATE
   android.permission.READ_DREAM_STATE
   android.permission.READ_SEARCH_INDEXABLES
   android.permission.RECOVERY
   android.permission.REMOTE_AUDIO_PLAYBACK
   android.permission.SET_ANIMATION_SCALE
   android.permission.SET_PREFERRED_APPLICATIONS
   android.permission.SET_SCREEN_COMPATIBILITY
   android.permission.SET_WALLPAPER_COMPONENT
   android.permission.START_ANY_ACTIVITY
   android.permission.START_TASKS_FROM_RECENTS
   android.permission.SUBSCRIBED_FEEDS_READ
   android.permission.SUBSCRIBED_FEEDS_WRITE
   android.permission.WRITE_APN_SETTINGS
   android.permission.WRITE_DREAM_STATE
   android.permission.WRITE_SETTINGS
   com.android.launcher.permission.INSTALL_SHORTCUT
   com.android.launcher.permission.UNINSTALL_SHORTCUT
   com.android.launcher3.permission.READ_SETTINGS
   com.android.launcher3.permission.WRITE_SETTINGS
   com.google.android.launcher.permission.READ_SETTINGS
   com.google.android.launcher.permission.WRITE_SETTINGS
   com.motorola.permission.ACCESS_COGRADIO

* android.permission-group.USER_DICTIONARY(个人)
   组下没有权限

* android.permission-group.VOICEMAIL(个人)
   组下没有权限

* android.permission-group.WALLPAPER
   android.permission.SET_WALLPAPER
   android.permission.SET_WALLPAPER_HINTS

* android.permission-group.WRITE_USER_DICTIONARY
   android.permission.WRITE_USER_DICTIONARY

* com.google.android.gms.permission.CAR_INFORMATION
   com.google.android.gms.permission.CAR_FUEL
   com.google.android.gms.permission.CAR_MILEAGE
   com.google.android.gms.permission.CAR_VENDOR_EXTENSION

* 无效的
   组下没有权限
于 2016-01-25T19:39:16.803 回答
0

Google 确实会为您提供有关权限和权限组关联的信息。 https://developer.android.com/guide/topics/permissions/overview#perm-groups

在 Android Studio 终端中,您可以使用以下命令获取信息:

adb shell pm list permissions -s

结果是这样的:

    All Permissions:
    
Microphone: record audio

SMS: read your text messages (SMS or MMS), receive text messages (WAP), receive text messages (MMS), receive text messages (SMS), send and view SMS messages, read cell broadcast messages

This app can provide content to Bixby Home cards.: Provide Bixby Home card content, Read Bixby Home data

请注意请求您的应用所需的所有权限。工作正常并不意味着它会在未来继续工作。权限可能会从一个组移动到另一个组,因此不要依赖当前状态:

注意:Android SDK 的未来版本可能会将特定权限 > 从一个组移动到另一个组。因此,不要将应用程序的逻辑建立在这些权限组的结构之上。

例如,READ_CONTACTS 与 Android 8.1(API 级别 27)的 WRITE_CONTACTS 位于同一权限组中。如果您的应用请求READ_CONTACTS > 权限,然后请求WRITE_CONTACTS 权限,不要假设> 系统可以自动授予WRITE_CONTACTS 权限。

于 2020-10-15T12:01:10.293 回答