权限分为普通权限和危险权限。所有权限都必须在manifest文件中进行声明。
普通权限:系统会自动授权,并且用户不能撤销权限。
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
危险权限:需要用户授权,Android5.1及以下平台,用户在安装app的时候进行授权,在Android6.0及以上平台,用户在运行app的时候进行授权。
每一个危险权限都属于一个权限组,如果app的targetSdkVersion是23及以上,并且运行在6.0及以上的平台上,会遵守下面两点:
1. 如果app还没有权限组里面任意一个权限,系统会弹出一个框提示用户是否允许app访问的权限组。
2. 如果app已经拥有了权限组里面其他权限,app再申请权限组里面的其他权限,系统会默认授权,不会再弹出咨询框询问用户是否同意。
Permission Group | Permissions |
---|---|
CALENDAR | |
CAMERA | |
CONTACTS | |
LOCATION | |
MICROPHONE | |
PHONE | |
SENSORS | |
SMS | |
STORAGE |
检查运行时权限,如果拥有权限,则返回PackageManager.PERMISSION_GRANTED,否则返回
PERMISSION_DENIED,并要进行下一步的申请权限
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR);申请运行时权限
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
关于运行时权限,只在6.0以上平台才有效,同样的app,在6.0以下,就和以前平台的一样。同样,6.0以下的app,运行在6.0以上的平台,也不会出现问题,也是在安装app的时候提示用户是否允许权限。但是用户还是可以取消权限授权,对于6.0以下的app运行在6.0以上的平台上,如果取消授权,会弹出这样的框