Android -- 开源库权限适配 RxPermissions 的基本使用
Posted Kevin-Dev
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android -- 开源库权限适配 RxPermissions 的基本使用相关的知识,希望对你有一定的参考价值。
运行时权限
从 android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。
系统权限分为两类:
- 正常权限:只需在你应用的 Androidmanifest.xml 中列出,安装时授权。
- 危险权限:需要在你应用的 Androidmanifest.xml 中列出,并在运行时授权。
如需了解更多关于正常权限与危险权限可以参阅这里。
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-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
2. 申请单个权限
//请求单个权限
btn_request.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
//这个请求事件我写在点击事件里面,
//点击button之后RxPermissions会为我们申请运行时权限
RxPermissions.getInstance(MainActivity.this)
.request(Manifest.permission.READ_CALENDAR)//这里填写所需要的权限
.subscribe(new Action1<Boolean>()
@Override
public void call(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(new Action1<Boolean>()
@Override
public void call(Boolean aBoolean)
if (aBoolean)
//当所有权限都允许之后,返回true
Log.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(new Action1<Permission>()
@Override
public void call(Permission permission)
if (permission.name.equals(Manifest.permission.ACCESS_FINE_LOCATION))
//当ACCESS_FINE_LOCATION权限获取成功时,permission.granted=true
Log.i("permissions", Manifest.permission.ACCESS_FINE_LOCATION + ":" + permission.granted);
if (permission.name.equals(Manifest.permission.RECORD_AUDIO))
//当RECORD_AUDIO 权限获取成功时,permission.granted=true
Log.i("permissions", Manifest.permission.RECORD_AUDIO + ":" + permission.granted);
if (permission.name.equals(Manifest.permission.CAMERA))
//当CAMERA权限获取成功时,permission.granted=true
Log.i("permissions", Manifest.permission.CAMERA + ":" + permission.granted);
);
效果图
以上是关于Android -- 开源库权限适配 RxPermissions 的基本使用的主要内容,如果未能解决你的问题,请参考以下文章
Android6.0运行时权限(基于RxPermission开源库)
Android文件选择器 自动申请存储权限 适配安卓 4.4 ~ 13支持无root权限访问和操作Android/data和Android/obb目录