您现在的位置是:首页 > 文章详情

Android动态获取运行时权限RxPermissions

日期:2017-05-08点击:453


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后:


原文链接:https://yq.aliyun.com/articles/615877
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章