Android6.0及以上版本一次请求多个权限的处理方式
2016-09-21 22:17
375 查看
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124; private void insertDummyContactWrapper() { List<String> permissionsNeeded = new ArrayList<String>(); final List<String> permissionsList = new ArrayList<String>(); if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION)) permissionsNeeded.add("GPS"); if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS)) permissionsNeeded.add("Read Contacts"); if (!addPermission(permissionsList, Manifest.permission.WRITE_CONTACTS)) permissionsNeeded.add("Write Contacts"); if (permissionsList.size() > 0) { if (permissionsNeeded.size() > 0) { // Need Rationale String message = "You need to grant access to " + permissionsNeeded.get(0); for (int i = 1; i < permissionsNeeded.size(); i++) message = message + ", " + permissionsNeeded.get(i); showMessageOKCancel(message, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); } }); return; } requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); return; } insertDummyContact(); } private boolean addPermission(List<String> permissionsList, String permission) { if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { permissionsList.add(permission); // Check for Rationale Option if (!shouldShowRequestPermissionRationale(permission)) return false; } return true; }
当每一个权限获得它的请求结果的时候,这个结果将会回调Activity的同一个方法:onRequestPermissionsResult。通常使用HashMap让源代码看起来更加清楚明了。
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: { Map<String, Integer> perms = new HashMap<String, Integer>(); // Initial perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.READ_CONTACTS, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.WRITE_CONTACTS, PackageManager.PERMISSION_GRANTED); // Fill with results for (int i = 0; i < permissions.length; i++) perms.put(permissions[i], grantResults[i]); // Check for ACCESS_FINE_LOCATION if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) { // All Permissions Granted insertDummyContact(); } else { // Permission Denied Toast.makeText(MainActivity.this, "Some Permission is Denied", Toast.LENGTH_SHORT) .show(); } } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
相关文章推荐
- Android6.0及以上版本一次请求多个权限的处理方式
- Android6.0系统以上版本调用系统相机运行时权限处理解决方案
- Android3.0版本以上出现android.os.NetworkOnMainThreadException异常与处理方式
- Struts2一个Action内包含多个请求处理方法(三种方式)
- @RequiresPermissions 控制权限的异常处理以及Ajax方式请求时返回json
- 动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多 第一种方式:指定method属性 这种方式我们前面已经用到过
- Struts2 一个form组成的action内包含多个请求的处理方式。通配符形式。
- android6.0版本的权限申请处理
- 移动开发----android6.0以上权限动态请求实现
- 映射的方式实现一个servlet类处理多个请求
- Struts2一个Action内包含多个请求处理方法的处理(三种方式)
- Jquery 一次处理多个ajax请求的代码
- Android的sdk23及以上版本中的权限处理
- android6.0及以上,写入数据到手机内存请求储存权限问题
- 请求WebMethod,Ajax处理更加简练【注:此方法需要在.net 3.5版本以上】
- Android3.0版本以上出现android.os.NetworkOnMainThreadException异常与处理方式
- 关于android6.0及以上版本运行时权限的学习笔记
- Android6.0运行时权限-SD存储卡权限处理方式
- 动态一次获取多种android6.0以上的权限
- Android6.0及以上版本申请权限讲解