检查android上的运行时权限

检查android上的运行时权限,android,android-6.0-marshmallow,android-permissions,Android,Android 6.0 Marshmallow,Android Permissions,我使用了ContextCompat.checkSelfPermission(这是Manifest.permission.ACCESS\u FINE\u位置)检查我的应用是否具有位置权限。此方法返回PackageManager.permission\u Grated,这是正确答案。现在我转到我的应用设置并禁用位置权限。现在,上述方法还返回PackageManager.permission\u Grated。但是它应该PackageManager.PERMISSION\u DENIED。有人能告诉我

我使用了
ContextCompat.checkSelfPermission(这是Manifest.permission.ACCESS\u FINE\u位置)
检查我的应用是否具有位置权限。此方法返回
PackageManager.permission\u Grated
,这是正确答案。现在我转到我的应用设置并禁用位置权限。现在,上述方法还返回
PackageManager.permission\u Grated
。但是它应该
PackageManager.PERMISSION\u DENIED
。有人能告诉我一些关于这件事的想法吗?如果我可以使用另一种方法,请求权限是什么?

if (checkSelfPermission(Manifest.permission.CAMERA) 
        == PackageManager.PERMISSION_DENIED) {
  requestPermissions(new String[]{Manifest.permission.CAMERA}, YOUR_REQUEST_CODE);
}
若要检查用户是否已接受您的请求,请覆盖以下代码

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case YOUR_REQUEST_CODE: {
            if (checkSelfPermission(Manifest.permission.CAMERA) == 
PackageManager.PERMISSION_GRANTED){
                // permission was granted
            } else {
                // permission denied
                //Disable the functionality 
                //that depends on this permission.
            }
            return;
        }
    }
}

参考:

根据您的评论,目标sdk是22。因此,
checkSelfPermission
方法总是将权限作为
已授予的
授予。如果要实现运行时权限,必须将其更改为23


如果你想要详细的答案。阅读所有评论

您确定正在使用棉花糖设备吗?您正在onCreate或OnResume中检查此状态。您可以发布代码吗?我是说,onRequestPermissionsResult的代码。@ankit是的,我正在使用marshmalowdevice@vishal我在onCreate中检查了此状态。有什么问题吗?我也在使用此代码。但在从应用程序设置禁用权限后,它将返回PackageManager.permission_grated。禁用后,它应该是PackageManager.permission_DENIED。不是吗?在您的activity OnResume方法执行checkSelfPermission()并告诉我结果