对于安卓6.0权限进行了一次封装
1:要有baseActivity
2:使用时调用请求方法
1:定义一个map集合,用来保存我们定义的权限请求
/** * 保存请求的权限 */ private Map<Integer, Runnable> mPermissionMap = new HashMap<>();
2:对外提供一个方法以供调用
/** * 请求权限的方法 * * @param requestCode * @param requestPermissionGroup * @param runnable */ public void requestPermission(int requestCode, String[] requestPermissionGroup, Runnable runnable) { //如果安卓版本为6.0以上请求权限,否则直接运行 if (Build.VERSION.SDK_INT > 23) { //保存未被用户同意的权限 ArrayList<String> prepareRequestPermission = new ArrayList<>(); for (int i = 0; i < requestPermissionGroup.length; i++) { //查询是否授予权限 int isGranted = ContextCompat.checkSelfPermission(this, requestPermissionGroup[i]); if (isGranted != PackageManager.PERMISSION_GRANTED) { //如果没同意则准备申请 prepareRequestPermission.add(requestPermissionGroup[i]); } } //判断是否有未申请的权限 if (prepareRequestPermission.size() != 0) { //临时保存任务 mPermissionMap.put(requestCode, runnable); //进行申请 ActivityCompat.requestPermissions(this, prepareRequestPermission.toArray(new String[prepareRequestPermission.size()]), requestCode); } else { //全部授权,执行任务 runnable.run(); } } else { runnable.run(); } }
3:重写baseActivity的onRequestPermissionResult方法
/** * 请求权限的返回结果 * * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); Set<Integer> requestCodeSet = mPermissionMap.keySet(); for (int currentCode : requestCodeSet) { if (currentCode == requestCode) { for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { //有权限拒绝了 Toast.makeText(this, "你必须同意权限才能使用", Toast.LENGTH_SHORT).show(); mPermissionMap.remove(requestCode); return; } } //权限全部同意了,执行成功的操作 mPermissionMap.get(requestCode).run(); mPermissionMap.remove(requestCode); } } }
以上就是基于baseActivity的权限封装