android开发RxPermissions获取运行时权限方法
程序员文章站
2022-10-31 21:19:36
android开发rxpermissions获取运行时权限方法,android6.0+添加了运行时权限分为两类:
一类是normal permissions,这类权限不涉及个人隐...
android开发rxpermissions获取运行时权限方法,android6.0+添加了运行时权限分为两类:
一类是normal permissions,这类权限不涉及个人隐私,不需要用户进行授权,比如手机震动,访问网络;
一类是dangerous permissions,这类权限涉及个人隐私,需要用户进行授权,比如读取sd卡,访问通讯录等。
android6.0 普通做法就是一个个去判断,这个当然太麻烦。 这里给出一个不错的第三方库, 使用超级简单,我们直接调用方法,几乎可以忽略一切需要自己处理的东西。
使用:
在app的buildgradle文件中添加依赖:
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' //rxjava2 compile "io.reactivex.rxjava2:rxjava:2.0.0"
单个权限使用 拨打电话为例
button1_btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { rxpermissions rxpermissions = new rxpermissions(timeactivity.this); // 添加所需权限 rxpermissions.request(manifest.permission.call_phone) .subscribe(new observer() { @override public void onsubscribe(disposable d) { } @override public void onnext(boolean value) { if (value) { toast.maketext(timeactivity.this, "同意权限 去打电话逻辑", toast.length_short).show(); } else { toast.maketext(timeactivity.this, "拒绝权限", toast.length_short).show(); } } @override public void onerror(throwable e) { } @override public void oncomplete() { } }); } });
注意:若 添加权限事找不到* 该权限 会爆红* 要引入的 为
import android.manifest;
多个权限使用一起返回 拍照和录音权限为例
button3_btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { // 多个权限用"," 隔开 rxpermissions rxpermissions2 = new rxpermissions(timeactivity.this); rxpermissions2.request( manifest.permission.camera, manifest.permission.record_audio) .subscribe(new observer() { @override public void onsubscribe(disposable d) { log.i(tag, "onsubscribe"); } @override public void onnext(boolean value) { // value 为ture 说明权限都开启,只要所请求权限有一个为关闭 ,则为false if (value) { toast.maketext(timeactivity.this, " 去打开相机逻辑 ", toast.length_short).show(); } else { toast.maketext(timeactivity.this, "拒绝权限", toast.length_short).show(); } } @override public void onerror(throwable e) { log.i(tag, "onerror_" + e.tostring()); } @override public void oncomplete() { log.i(tag, "oncomplete"); } }); } });
多个权限使用逐个返回 拍照和录音权限为例
和一起返回的区别 new consumer<>()
用一个数组去保存 识别哪些返回 注意 accept()调用次数和需要申请的权限个数有关 。需要处理 返回结果 这里 return 无效
// 成员变量 用来保存申请权限返回识别,方便做处理 长度和请求个数有关 final boolean[] ispermissiontype = {false, false};
button2_btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { rxpermissions rxpermissions = new rxpermissions(timeactivity.this); //分别申请多个权限 //分别申请多个权限时,使用requesteach rxpermissions.requesteach( manifest.permission.camera, manifest.permission.record_audio) // 和一起返回区别 .subscribe(new consumer() { @override public void accept(permission permission) throws exception { log.i("permissions", "回调次数 ?????"); if (permission.name.equals(manifest.permission.camera)) { //当record_audio 权限获取成功时,permission.granted=true log.i("permissions", manifest.permission.camera + ":" + permission.granted); ispermissiontype[0] = permission.granted; if (!ispermissiontype[0]) { toast.maketext(timeactivity.this, "拒绝权限 +camera ", toast.length_short).show(); return; } } if (permission.name.equals(manifest.permission.record_audio)) { //当camera权限获取成功时,permission.granted=true log.i("permissions", manifest.permission.record_audio + ":" + permission.granted); ispermissiontype[1] = permission.granted; // 如果上一个权限没开 ,就不再提示第二个, 若不处理 所有请求的没开权限 都会提示 if (!ispermissiontype[0]) { } else { if (!ispermissiontype[1]) { toast.maketext(timeactivity.this, "拒绝权限 + record_audio ", toast.length_short).show(); return; } } } if (ispermissiontype[0] && ispermissiontype[1]) { toast.maketext(timeactivity.this, " 去打开相机逻辑", toast.length_short).show(); } } }); // 多个权限用逗号隔开 } });
使用就是这么简单 使用逐个返回时候 ,和guthub 给出的有点区别 这个 rxjava 有关。 需要注意区分
new action1() //rxjava1 为 new consumer() //rxjava2
下一篇: 广州科技馆在哪里(地理位置+交通指南)
推荐阅读
-
Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】
-
Android开发之获取系统当前时间的方法
-
Android手机获取root权限并实现关机重启功能的方法
-
android开发RxPermissions获取运行时权限方法
-
Android5.0 系统权限获取判断实现方法
-
详解Android开发录音和播放音频的步骤(动态获取权限)
-
Android 7.0开发获取存储设备信息的方法
-
delphi XE开发微信支付Android获取手机存储权限、Android获取短信权限
-
Android app开发中获取cpu arm架构信息及执行shell命令方法
-
android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)