导入Lambda表达式
使用RxPermisson使用Lambda表达式能够表述的更加清晰
具体导入方式:
先确定使用的JAVA版本是不是1.8的。
通过File-Other Settings-> Default Project Structure查看
在外层build.gradle里添加
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.0'
}
在内层的build.gradle里添加
apply plugin: 'me.tatarka.retrolambda'
在android{}里添加
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
这样就能使用Lambda表达式了
RxPermisson导入
这里跟RxJava2配合使用
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
如果使用的版本是RxJava1,可以参考
https://github.com/tbruyelle/RxPermissions
具体用法
先获取RxPermission 实例
RxPermission rxPermissions = new RxPermissions(this);
接着我们申请一个权限
rxPermissions.request( Manifest.permission.READ_PHONE_STATE)
.subscribe(granted->{
if(granted){
Toast.makeText(SecondActivity.this,"授权成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(SecondActivity.this,"授权失败",Toast.LENGTH_SHORT).show();
}
});
这样就能够动态获取一个权限。
接下来我们申请两个权限,当然对每个权限都是单独申请
rxPermissions
.requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE)
.subscribe(permission -> {
if (permission.granted) {
// `permission.name` is granted !
Toast.makeText(SecondActivity.this,"授权成功",Toast.LENGTH_SHORT).show();
} else if (permission.shouldShowRequestPermissionRationale){
Toast.makeText(SecondActivity.this,"授权失败1",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SecondActivity.this,"授权失败2",Toast.LENGTH_SHORT).show();
}
});
这里不使用大多数博客使用的 Manifest.permission.CAMERA,因为有的小伙伴可能这里会出现授权的失败的情况,解决办法:
在AndroidManifest.xml里添加
<uses-permission android:name="android.permission.CAMERA"/>
rxPermissions.request(Manifest.permission.CAMERA)
.subscribe(granted->{
if(granted){
Toast.makeText(SecondActivity.this,"授权成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(SecondActivity.this,"授权失败",Toast.LENGTH_SHORT).show();
}
});
之后再去获取权限就成功了。