Android Marshmallow位置权限处理

Him*_*ang 1 android location runtime-permissions

我正在使用Android Marshmallow运行时权限.我向用户询问了位置许可,假设他已经允许获取该位置并且我已经开始获取位置但是现在用户已经拒绝了应用程序设置的许可.现在申请已经崩溃了.我怎么处理它?请帮忙.

Nan*_*pal 7

这对我有用!!! 在您的应用程序的Splash活动中执行以下操作,

注意:如果用户在一段时间后禁用了权限,这些代码将不允许在没有任何崩溃的情况下进入应用程序,它会要求对话框允许所需的权限.

1)为请求代码声明一个int变量,

private static final int REQUEST_CODE_PERMISSION = 2;
Run Code Online (Sandbox Code Playgroud)

2)使用您需要的权限名称声明一个字符串,

String mPermission = Manifest.permission.ACCESS_FINE_LOCATION,
Run Code Online (Sandbox Code Playgroud)

3)下一步检查onCreate方法的运行时权限条件,

 try {
                if (ActivityCompat.checkSelfPermission(this, mPermission)
                        != MockPackageManager.PERMISSION_GRANTED) {

                    ActivityCompat.requestPermissions(this,
                            mPermission, REQUEST_CODE_PERMISSION);

                  // If any permission above not allowed by user, this condition will execute every time, else your else part will work
                } 
            } catch (Exception e) {
                e.printStackTrace();
            }
Run Code Online (Sandbox Code Playgroud)

4)现在声明onRequestPermissionsResult方法来检查请求代码,

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        Log.e("Req Code", "" + requestCode);
        if (requestCode == REQUEST_CODE_PERMISSION) {
            if (grantResults.length == 1 &&
                    grantResults[0] == MockPackageManager.PERMISSION_GRANTED ) {

               // Success Stuff here

            }
         else{
               // Failure Stuff
           }
        }

    }
Run Code Online (Sandbox Code Playgroud)