Android|Android 6.0动态申请权限

【Android|Android 6.0动态申请权限】简单实现动态申请权限的步骤:
在此之前,需要在 AndroidManifest.xml里定义需要申请的权限

  1. 写一个专门检测权限的工具类 (方便以后直接移植到其他项目中)
  2. 在onCreate方法使用该工具类申请权限
  3. 申请权限回调方法
  1. 编写CheckPermissionUtils
** * 检测权限工具类 */public final class CheckPermissionUtils { private CheckPermissionUtils() {}// 需要申请的权限 private static String[] permissions = new String[] { Manifest.permission.ACCESS_FINE_LOCATION, //位置 Manifest.permission.READ_PHONE_STATE //手机状态 }; // 检测权限 public static String[] checkPermission(Context context) { List data = https://www.it610.com/article/new ArrayList<>(); // 存储未申请的权限 for (String permission : permissions) { int checkSelfPermission = ContextCompat.checkSelfPermission(context, permission); if (checkSelfPermission == PackageManager.PERMISSION_DENIED) { // 判断是否未申请 data.add(permission); } }return data.toArray(new String[data.size()]); } }

  1. 使用 CheckPermissionUtils
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); // 检测权限 String[] permissions = CheckPermissionUtils.checkPermission(this); if (permissions.length == 0) { // 需要申请的权限都申请了 // 2s 后进入主界面 handler.sendEmptyMessageDelayed(ENTER_MAIN_UI, 2000); } else { // 申请权限 ActivityCompat.requestPermissions(this, permissions, 100); } }

  1. 申请回调
/** * 申请权限返回 * @param requestCode 返回码 * @param permissions 权限 * @param grantResults 结果 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 100) { for (int grantResult : grantResults) { // 拒绝操作 if (grantResult == PackageManager.PERMISSION_DENIED) { finish(); return; } } // 1s 进入主界面 handler.sendEmptyMessageDelayed(ENTER_MAIN_UI, 1000); } }

    推荐阅读