运行时权限
从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。
系统权限分为两类:
- 正常权限:只需在你应用的 Androidmanifest.xml 中列出,安装时授权。
- 危险权限:需要在你应用的 Androidmanifest.xml 中列出,并在运行时授权。
如需了解更多关于正常权限与危险权限可以参阅这里。
关于 Android 6.0 运行时权限的详细讲解可以看这篇文章和官方文档。
RxPermissions
RxPermissions 能配合 RxJava 与新的 Android M 权限模型一起使用,用于处理 Android 运行时权限。
一、集成说明
在 app 模块下的
build.gradle
添加下面配置:
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
compile 'io.reactivex:rxjava:1.1.3'
二、使用说明
1. 在清单文件中,添加 Dangerous Permissions
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.RECEIVE_MMS"/><uses-permissionandroid:name="android.permission.READ_CALL_LOG"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permissionandroid:name="android.permission.READ_CALENDAR"/>
2. 申请单个权限
//请求单个权限
btn_request.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(View view){//这个请求事件我写在点击事件里面,//点击button之后RxPermissions会为我们申请运行时权限RxPermissions.getInstance(MainActivity.this).request(Manifest.permission.READ_CALENDAR)//这里填写所需要的权限.subscribe(newAction1<Boolean>(){@Overridepublicvoidcall(Boolean aBoolean){if(aBoolean){//true表示获取权限成功(注意这里在android6.0以下默认为true)Log.i("permissions",Manifest.permission.READ_CALENDAR+":"+ 获取成功);}else{Log.i("permissions",Manifest.permission.READ_CALENDAR+":"+ 获取失败);}}});}});
效果图
3. 申请多个权限
//同时请求多个权限RxPermissions.getInstance(MainActivity.this).request(Manifest.permission.RECEIVE_MMS,Manifest.permission.READ_CALL_LOG)//多个权限用","隔开.subscribe(newAction1<Boolean>(){@Overridepublicvoidcall(Boolean aBoolean){if(aBoolean){//当所有权限都允许之后,返回trueLog.i("permissions","btn_more_sametime:"+ aBoolean);}else{//只要有一个权限禁止,返回false,//下一次申请只申请没通过申请的权限Log.i("permissions","btn_more_sametime:"+ aBoolean);}}});
效果图
4. 同时请求多个权限
//分别申请多个权限RxPermissions.getInstance(MainActivity.this)//分别申请多个权限时,使用requestEach.requestEach(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA).subscribe(newAction1<Permission>(){@Overridepublicvoidcall(Permission permission){if(permission.name.equals(Manifest.permission.ACCESS_FINE_LOCATION)){//当ACCESS_FINE_LOCATION权限获取成功时,permission.granted=trueLog.i("permissions",Manifest.permission.ACCESS_FINE_LOCATION+":"+ permission.granted);}if(permission.name.equals(Manifest.permission.RECORD_AUDIO)){//当RECORD_AUDIO 权限获取成功时,permission.granted=trueLog.i("permissions",Manifest.permission.RECORD_AUDIO+":"+ permission.granted);}if(permission.name.equals(Manifest.permission.CAMERA)){//当CAMERA权限获取成功时,permission.granted=trueLog.i("permissions",Manifest.permission.CAMERA+":"+ permission.granted);}}});
效果图
版权归原作者 Kevin-Dev 所有, 如有侵权,请联系我们删除。