Android 6.0 相比之前的Android版本有一个很大的不同点,就是动态获取权限,即不仅在Manifest文件里设置各种权限,在使用一些危险权限时候还得动态的弹出个对话框让客户去选择授予这个权限。
基本内容和代码就不重复了,大家可以参考这一篇:
http://gudong.name/%E6%8A%80%E6%9C%AF/2015/11/10/android_m_permission.html
或者http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1110/3670.html
需要动态赋予的权限列表是:
Permission Group | Permissions |
android.permission-group.CALENDAR | · android.permission.READ_CALENDAR · android.permission.WRITE_CALENDAR |
android.permission-group.CAMERA | · android.permission.CAMERA |
android.permission-group.CONTACTS | · android.permission.READ_CONTACTS · android.permission.WRITE_CONTACTS · android.permission.GET_ACCOUNTS |
android.permission-group.LOCATION | · android.permission.ACCESS_FINE_LOCATION · android.permission.ACCESS_COARSE_LOCATION |
android.permission-group.MICROPHONE | · android.permission.RECORD_AUDIO |
android.permission-group.PHONE | · android.permission.READ_PHONE_STATE · android.permission.CALL_PHONE · android.permission.READ_CALL_LOG · android.permission.WRITE_CALL_LOG · com.android.voicemail.permission.ADD_VOICEMAIL · android.permission.USE_SIP · android.permission.PROCESS_OUTGOING_CALLS |
android.permission-group.SENSORS | · android.permission.BODY_SENSORS |
android.permission-group.SMS | · android.permission.SEND_SMS · android.permission.RECEIVE_SMS · android.permission.READ_SMS · android.permission.RECEIVE_WAP_PUSH · android.permission.RECEIVE_MMS · android.permission.READ_CELL_BROADCASTS |
android.permission-group.STORAGE | · android.permission.READ_EXTERNAL_STORAGE · android.permission.WRITE_EXTERNAL_STORAGE |
下面是几个开源的项目,及它们的特点:
http://blog.csdn.net/a1018875550/article/details/51525438
PermissionsDispatcher:使用注解的形式设置权限,
@RuntimePermissions 是必须的注册当前activity或fragment
@NeedsPermission 是必须要有的,在需要权限的方法上添加
@OnShowRationale 注释一个方法解释为什么需要这个权限并提示用户判断是否允许
@OnPermissionDenied 当权限被拒绝时调用
@OnNeverAskAgain 当用户勾选了不再提示时调用
优点:功能齐全,代码简洁。
缺点:配置较麻烦,必须在Android Studio 2.0+版本使用
PermissionGen:https://github.com/lovedise/PermissionGen
在需要权限的方法中加入需要权限的代码,然后覆盖onRequestPermissionsResult(),然后添加注解的方法@PermissionFail(),@PermissionSuccess(),编写响应的逻辑。
优点:配置简单,引用库即可,代码简洁
缺点:功能较少,目前只找到了允许和拒绝的回调
MPermission:https://github.com/hongyangAndroid/MPermissions
在上一个的基础上把运行时注解改成了编译时注解。需要解释会自动调用解释注解的方法@ShowRequestPermissionRationale()
RxPermission:https://github.com/tbruyelle/RxPermissions
代码比上面更简洁了一些,没有用注解,不需要覆盖onRequestPermissionsResult(),配置不麻烦,这个完全遵循Rx规则,功能上目前没有找到解释的回调(源码不多,个人感觉更改方便)。
RxView.clicks(findViewById(R.id.enableCamera))
.compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA))
.subscribe(granted -> {
// R.id.enableCamera has been clicked
});
//If multiple permissions at the same time, the result is combined :
RxPermissions.getInstance(this)
.request(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(granted -> {
if (granted) {
// All requested permissions are granted
} else {
// At least one permission is denied
}
});
//You can also observe a detailed result with requestEach or ensureEach :
RxPermissions.getInstance(this)
.requestEach(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(permission -> { // will emit 2 Permission objects
if (permission.granted) {
// `permission.name` is granted !
}
});.
PermissionHelper:https://github.com/k0shk0sh/PermissionHelper
功能齐全,没有使用注解,配置简单,但需要实现OnPermissionCallback接口,实现里面的方法来动态设置权限。