写这个的已经很多了,我主要是遇到了一些问题 记录一下
首先是版本的问题
这个需要与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>() {@Overridepublic void accept(Boolean aBoolean) throws Exception {if (aBoolean) {//用户同意permisionListener.success();} else {AlertDialog.Builder builder = new AlertDialog.Builder(mActivity).setTitle("权限申请").setMessage("请在打开的窗口的权限中开启权限,以正常使用本应用").setPositiveButton("去设置", new DialogInterface.OnClickListener() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {mActivity.finish();}});builder.setCancelable(false);builder.show();}}});} else {permisionListener.success();}}public interface PermisionListener {void success();}
}