写这个的已经很多了,我主要是遇到了一些问题 记录一下
首先是版本的问题
这个需要与Rxjava协调使用,那么引用的时候如果版本不一样,创建的方法也是不同的比如说我用的这个版本创建实例的方法为
RxPermissions.getInstance();
下边是我用的版本
值得一提的是 因为Android的机制问题 如果用户第一次拒绝了权限 那么第二次请求权限时,系统会提示“不再提示”
当时我考虑的是,比如第一次拒绝与第二次拒绝分别做操作,但是后来我发现没有必要(不考虑产品需求的情况下)
事实上,不管用户是否勾选了不再提示,每次请求权限,都会执行失败的方法,我做的就是在失败里边做操作。
附上工具类
public class PermisionUtil {
/**
* 申请权限
*/
public static void getPermision(final Activity mActivity, final PermisionListener permisionListener) {
final boolean permision = false;
if(ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
RxPermissions.getInstance(mActivity).request(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean) {
//用户同意
permisionListener.success();
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity).setTitle("权限申请")
.setMessage("请在打开的窗口的权限中开启权限,以正常使用本应用")
.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
Intent intent =
new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + mActivity.getPackageName()));
intent.addCategory(Intent.CATEGORY_DEFAULT);
// Android L 之后Activity的启动模式发生了一些变化
// 如果用了下面的 Intent.FLAG_ACTIVITY_NEW_TASK ,并且是 startActivityForResult
// 那么会在打开新的activity的时候就会立即回调 onActivityResult
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity.startActivity(intent);
mActivity.finish();
} catch (Throwable e) {
}
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mActivity.finish();
}
});
builder.setCancelable(false);
builder.show();
}
}
});
} else {
permisionListener.success();
}
}
public interface PermisionListener {
void success();
}
}