1

我正在研究 Android Marshmallow 运行时权限。我向用户询问位置权限,假设他已允许获取位置并且我已经开始获取位置但现在用户拒绝了应用程序设置的权限。现在应用程序崩溃了。我该如何处理?请帮忙。

4

2 回答 2

7

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

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

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

private static final int REQUEST_CODE_PERMISSION = 2;

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

String mPermission = Manifest.permission.ACCESS_FINE_LOCATION,

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

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
           }
        }

    }
于 2016-01-27T13:05:21.500 回答
0
    if (Build.VERSION.SDK_INT >= 23) {
       if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {
    //here req again for Permission
    }
}
于 2016-01-19T08:13:04.587 回答