Android动态获取运行时权限RxPermissions
Android动态获取运行时权限RxPermissions
新版的Android权限控制更加严格,一般需要在APP的运行时动态获取,如果按照谷歌官方的方法比葫芦画瓢获取动态运行时权限,代码比较繁琐,如果和业务逻辑再搅和在一起,代码的可读性变得比较差,因此一些第三方的运行时权限获取库因运而生。
RxPermissions基于RxJava2,实现了一种更为灵活和简洁的Android动态获取运行时权限的解决方案。其在github上的项目地址:https://github.com/tbruyelle/RxPermissions
首先需要在app的build.gradle文件引入RxPermissions以及RxJava2:
compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
RxPermissions需要Java1.8,同时需要开启jackOptions,写好的app的build.gradle文件例如:
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion '25.0.2' defaultConfig { applicationId "zhangfei.demo" minSdkVersion 21 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" jackOptions { enabled true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' testCompile 'junit:junit:4.12' compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' }
假设在Androidmanifest.xml申请两个读写权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
上层Java代码:
package zhangfei.demo; import android.Manifest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.tbruyelle.rxpermissions2.RxPermissions; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getPermissions(); } }); } private void getPermissions() { RxPermissions rxPermissions = new RxPermissions(this); rxPermissions.request(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE) .subscribe(granted -> { if (granted) { Toast.makeText(getApplicationContext(), "已经获取所需权限", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(getApplicationContext(), "未能获取所需权限", Toast.LENGTH_SHORT) .show(); } }); } }
假设在APP运行时候拒绝,那么点击获取按钮,调用getPermissions后:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何用两个button等分屏幕宽度?
如何用两个button等分屏幕宽度? 问题引入 现有一个小问题:如何使用两个按钮,然后将屏幕宽度评分?如图:再进一步细节:如果按钮的宽度相等呢?不相等呢? 看看人家的实现 Android的实现 1.按钮宽度相等的实现这里直接上布局文件(.xml)的代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:visibility="invisible"/> <Bu...
- 下一篇
Frida hook带handler的method
有些Class里面有Handler对象,就必须在 主线程里执行,否则报错 E/AndroidRuntime( 2434): java.lang.ExceptionInInitializerError E/AndroidRuntime( 2434): at dalvik.system.NativeStart.run(Native Method) E/AndroidRuntime( 2434): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() E/AndroidRuntime( 2434): at android.os.Handler.(Handler.java:200) Frida提供了这样的设施, 那就是 scheduleOnMainThread send(Java.available); Java.perform(function () { send(Java.androidVersion); send(Java...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主