android ContextCompat.checkSelfPermission始终返回PERMISSION_GRANTED

时间:2017-07-22 07:05:35

标签: android permissions

在我的Android应用程序( minSdkVersio n 15)中,我必须创建目录并将文件写入其中。在我使用的AppManifest中:

  

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

     

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在创建目录或文件之前,我正在检查是否允许或拒绝权限,如

   boolean isAllow = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;

但它始终返回 true PERMISSION_GRANTED ,即使有人设置拒绝来自设置的权限 - &gt;应用 - &gt;权限

Deny Permission

为什么checkSelfPermission总是返回PERMISSION_GRANTED?有没有办法检查权限是否被拒绝?

要调用我使用过的权限:

  ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

但它没有显示权限对话??

3 个答案:

答案 0 :(得分:3)

在新权限模型中,具有危险保护级别的权限是运行时权限。对于定位到M及以上的应用,用户可能无法随时授予此类权限或撤消这些权限。对于定位API低于Marshmallow(&lt; 23)的应用,这些权限始终被授予,因为此类应用不会期望权限撤销并且会崩溃。因此,当用户在UI中禁用遗留应用程序的权限时,平台会禁用由此权限保护的API,使其成为无操作,无效或返回空结果或默认错误。

有关详细信息,请访问PermissionChecker

答案 1 :(得分:0)

对于那些使用Xamarin开发的人,请确保在清单中显式设置targetSDK版本> = 23。

不要为目标SDK自动使用!

答案 2 :(得分:0)

如果您的targetSdkVersion至少为23,则可以通过以下代码解决问题:

int permissionCheck = PermissionChecker.checkSelfPermission(getReactApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE);