一、Android现在申请权限比较麻烦,在github查找到一个比较好用的库:AndPermission
依赖:
implementation 'com.yanzhenjie:permission:2.0.0-rc4'
在Fragment中要加上下面的语句,Activity中则可以省略,但我处理方式是都加上了,本身就是一个父类的重写方法,activity中用不用看自己。
// 在Fragment中这句话不能注释,否则Fragment接收不到获取权限的通知。
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
获取多个权限:
// 先判断是否有权限。
if(AndPermission.hasPermission(this, Manifest.permission.READ_SMS)) {
// 有权限,直接do anything.
} else {
// 申请权限。
AndPermission.with(this)
.requestCode(100)
.permission(Manifest.permission.WRITE_CONTACTS, Manifest.permission.READ_SMS)
.send();
}
具体实现参考:https://blog.csdn.net/yanzhenjie1003/article/details/52503533
必须在初始化阶段调用,例如onCreate()方法中
依赖:
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.5'
申请单个权限:
RxPermissions rxPermissions = new RxPermissions(MainActivity.this);
rxPermissions.request(Manifest.permission.READ_EXTERNAL_STORAGE)
.subscribe(new Observer<Boolean>() {
@Override
public void onSubscribe(Disposable d) {
Toast.makeText(MainActivity.this, "应用需要读写权限", Toast.LENGTH_SHORT).show();
}
@Override
public void onNext(Boolean value) {
if(value){
Toast.makeText(MainActivity.this, "同意权限", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this, "拒绝权限", Toast.LENGTH_S