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 = 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);
        }
    }

你可能感兴趣的:(Android 6.0动态申请权限)