Android : M 与 N 的权限管理

时间:2021-11-21 15:18:38

从 M 开始,permission 分为

  • Normal permission
  • Runtime permission

Normal permission 直接在 manifest 里声明就可以用了。

Android : M 与 N 的权限管理Android : M 与 N 的权限管理
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT
View Code

Runtime permission 需要询问用户,获得用户许可后才能用。

需要Android SDK 23以后,在 manifest 里声明。

然后加入权限管理的代码。

Runtime permission 分为小组。每个小组包括多个权限。一旦获得小组中的一个权限,其他权限也直接被授予。

权限管理步骤:

  • 判断是否拥有某个权限  
if (checkSelfPermission(WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
...
}
  • 如果没有这个权限,申请权限
requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE},REQUEST_STORAGE);
  • 如果用户拒绝权限,可以决定不再询问货继续询问
  • 如果用户拒绝的时候勾选 (don't ask again),不再询问或显示一个 dialog 让用户转到设置里接受权限(注意:这种情况下系统不能再显示权限询问的 dialog)。