Android 权限管理

来源:互联网 发布:通达信分时均价线源码 编辑:程序博客网 时间:2024/06/17 23:46

一篇完美解释6.0 M android运行权限管理解决方法

http://mdsa.51cto.com/art/201508/489882_all.htm


PermissionDispatcher-针对类、方法权限申请的三方库

https://github.com/hotchemi/PermissionsDispatcher


观后感:

1.targetSdkVersion 低于 23,那将被认为app没有用23新权限测试过,那将被继续使用旧有规则:用户在安装的时候不得不接受所有权限,安装后app就有了那些权限咯!此时用户依然可以取消已经同意的授权!

2.targetSdkVersion 低于23的app调用一个需要权限的函数时,这个权限如果被用户取消授权了的话,不抛出异常。但是他将啥都不干,结果导致函数返回值是null或者0.

3.权限类型

PROTECTION_NORMAL类权限

当用户安装或更新应用时,系统将授予应用所请求的属于 PROTECTION_NORMAL 的所有权限(安装时授权的一类基本权限)。这类权限包括:

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 

只需要在AndroidManifest.xml中简单声明这些权限就好,安装时就授权。不需要每次使用时都检查权限,而且用户不能取消以上授权。

运行时权限。运行过程中可以授权和取消授权的权限,与PROTECTION_NORMAL相反。

4.权限组。同一组的任何一个权限被授权了,其他权限也自动被授权

5.api>=23时,权限相关系统方法.

shouldShowRequestPermissionRationale()--是否拒绝时勾选了“不再提醒”

requestPermissions()--请求权限

onRequestPermissionsResult()--请求权限的结果

6.对于api<23的版本兼容。

用v4兼容库,已对这个做过兼容,用这个方法代替:

ContextCompat.checkSelfPermission()

被授权函数返回PERMISSION_GRANTED,否则返回PERMISSION_DENIED ,在所有版本都是如此。
ActivityCompat.requestPermissions()
这个方法在M之前版本调用,OnRequestPermissionsResultCallback 直接被调用,带着正确的 PERMISSION_GRANTED或者 PERMISSION_DENIED 。
ActivityCompat.shouldShowRequestPermissionRationale()
在M之前版本调用,永远返回false。
用v4包的这三方法,完美兼容所有版本!这个方法需要额外的参数,Context or Activity。

另外:后两个方法,我们也可以在Fragment中使用,用v13兼容包:FragmentCompat.requestPermissions() and FragmentCompat.shouldShowRequestPermissionRationale().和activity效果一样。

7.当app开着的时候权限被撤消了,app会突然终止 terminated。重新刷新页面。

0 0