Android6.0运行时权限以及RxPermissions的使用
来源:互联网 发布:龙虎榜数据分析软件 编辑:程序博客网 时间:2024/06/03 19:38
普通方式请求
以拨打电话为例
@OnClick(R.id.btnCommon)public void CommonCall() { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 0); }else { startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:" + 10000))); }}
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 0) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:" + 10000))); } }}
RxPermissions方式请求
RxPermissions github 传送门:RxPermissions
//RxJava的依赖包 compile 'io.reactivex.rxjava2:rxjava:'+rxjava_version //RxAndroid的依赖包 compile 'io.reactivex.rxjava2:rxandroid:'+rxjava_version //RxPermissions compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
- 首先需要做初始化工作
RxPermissions rxPermissions = new RxPermissions(this);
@OnClick(R.id.btnRxPermission)public void RxPermissionCall() { rxPermissions.request(Manifest.permission.CALL_PHONE).subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean granted) throws Exception { if (granted) { startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:" + 10000))); } } });}
如果使用了java8 这段代码将会是这样 非常简洁
@OnClick(R.id.btnRxPermission)public void RxPermissionCall() { rxPermissions.request(Manifest.permission.CALL_PHONE).subscribe(granted -> { if (granted) { startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:" + 10000))); } });}
RxPermissions 请求多个权限
rxPermissions .requestEach(Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE) .subscribe(permission -> { // will emit 2 Permission objects if (permission.granted) { // `permission.name` is granted ! } else if (permission.shouldShowRequestPermissionRationale) // Denied permission without ask never again } else { // Denied permission with ask never again // Need to go to the settings } });
普通方法Fragment中运行时权限的特殊处理
在Fragment中申请权限,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否则会回调到Activity的 onRequestPermissionsResult
如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方法,onRequestPermissionsResult不会回调回来,建议使用 getParentFragment().requestPermissions方法,
这个方法会回调到父Fragment中的onRequestPermissionsResult,加入以下代码可以把回调透传到子Fragment
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); List<Fragment> fragments = getChildFragmentManager().getFragments(); if (fragments != null) { for (Fragment fragment : fragments) { if (fragment != null) { fragment.onRequestPermissionsResult(requestCode,permissions,grantResults); } } }}
0 0
- Android6.0运行时权限以及RxPermissions的使用
- Android6.0运行时权限解析,RxPermissions的使用
- android6.0新权限申请以及RxPermissions库的使用
- Android6.0使用RxPermissions获取运行时权限
- Android6.0运行时权限解析,RxPermissions的使用,自己封装一套权限框架
- Android6.0运行时权限解析,RxPermissions的使用,自己封装一套权限框架
- Android6.0------权限申请RxPermissions
- android 运行时权限解析RxPermissions的使用
- android6.0权限适配RxPermissions
- RxPermissions 获取运行时权限
- Android 6.0以上运行权限及RxPermissions的使用
- Android6.0运行时权限-----AndPermission的使用
- Android6.0运行时权限的封装
- Android6.0运行时权限的处理
- Android6.0的运行时权限
- Android6.0+运行时权限的处理
- Android6.0权限管理到RxPermissions源码分析
- Android基础知识---RxPermissions获取运行时权限
- jsp中form的type类型
- C++图:极简版的图类(邻接链表)
- 剑指offer-56.删除链表中重复的结点
- struts.xml 配置 细节
- springboot shiro cas的坑包括取不到securityManager和拦截器全部拦截
- Android6.0运行时权限以及RxPermissions的使用
- Ztree 权限分配方面的应用
- 考研英语
- 小知识
- 前端控件之Jquery datetimepicker的使用总结
- 【组合数】ZOJ3557 HDU3944
- 戴尔笔记本双显卡配置nvidia367+cuda8.0+caffe(通用版)
- 首款兼容DWM1000的远距离UWB测距模块——MAX1000
- Linux内核源码-boot下的汇编代码分析(Linux0.11)