android权限组的内容

时间:2012-09-10 12:17:53

标签: android permissions

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

例如。 android.permission.ACCOUNT_MANAGER与权限组ACCOUNTS相关联。 我需要一份这样的协会清单。

4 个答案:

答案 0 :(得分:1)

Android权限列在here和权限组here。然后还可以查看PemissionInfo()

答案 1 :(得分:1)

答案 2 :(得分:0)

可以使用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;
}

/** * 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
   no permissions under group

* android.permission-group.ACCOUNTS (personal)
   no permissions under group

* android.permission-group.AFFECTS_BATTERY
   android.permission.CHANGE_WIFI_MULTICAST_STATE
   android.permission.FLASHLIGHT
   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 (personal)
   no permissions under group

* android.permission-group.CALENDAR (personal)
   no permissions under group

* android.permission-group.CAMERA (personal)
   no permissions under group

* android.permission-group.COST_MONEY
   no permissions under group

* 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 (personal)
   no permissions under group

* 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 (personal)
   no permissions under group

* android.permission-group.MESSAGES (personal)
   no permissions under group

* android.permission-group.MICROPHONE (personal)
   no permissions under group

* 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 (personal)
   no permissions under group

* android.permission-group.PHONE_CALLS (personal)
   no permissions under group

* android.permission-group.SCREENLOCK (personal)
   no permissions under group

* android.permission-group.SOCIAL_INFO (personal)
   no permissions under group

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

* android.permission-group.STORAGE (personal)
   no permissions under group

* 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 (personal)
   no permissions under group

* android.permission-group.VOICEMAIL (personal)
   no permissions under group

* 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

* null
   no permissions under group

答案 3 :(得分: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与WRITE_CONTACTS处于与Android 8.1(API级别27)相同的权限组中。如果您的应用请求READ_CONTACTS许可,然后请求WRITE_CONTACTS许可,请不要假定系统可以自动授予WRITE_CONTACTS许可。