【发布时间】:2019-11-13 20:09:49
【问题描述】:
所以我已经在这里坐了 4 个小时,一直在摸不着头脑,为什么我的 2 台设备运行不正常。 问题是,即使授予了权限, checkSelfPermission 也会返回 false! 我 100% 确定这不应该发生,因为它在 5-6 天前按预期工作。 这是我用来检查权限是否被授予的代码。
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Log.v("BaseActivity", "Permission is granted");
return true;
} else {
Log.v("BaseActivity", "Storage Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
return false;
}
} else { //permission is automatically granted on sdk<23 upon installation
Log.v("BaseActivity", "Permission is granted");
return true;
}
}
现在,每当我第一次打开包含此代码的活动 (BaseActivity) 时,它都会按预期工作并请求用户授予存储权限。
但是,在此活动中的片段中,我想访问文件,每当我调用此方法时,它都开始返回 false。
我已经公开了这个方法,它曾经根据情况返回真/假。
以下是我检查是否在 Fragment 中授予权限的方法。
if (!((BaseActivity) getActivity()).isStoragePermissionGranted()) {
Toast.makeText(getActivity(), getString(R.string.storagePermissionError), Toast.LENGTH_LONG).show();
break;
}
我在compileSdkVersion 和targetSdkVersion 28,所以范围外部存储权限不应该是问题。我在这里做错了什么?为什么 isStoragerPermissionGranted() 方法总是返回 false,即使我 100% 已向我的应用授予 STORAGE 权限?
【问题讨论】:
-
您是否在 Manifest 中添加了这些权限?
-
还可以尝试使用Settings->Apps->"Your_APP"->Permissions手动检查授予或未授予权限的位置
-
if (!((BaseActivity) getActivity()).isStoragePermissionGranted()奇怪的构造。将函数设为静态并像if (!BaseActivity.isStoragePermissionGranted(getActivity())一样调用它。 -
@Md.Asaduzzaman 是的,我已经在 Manifest 中添加了这些权限,并且我手动检查了是否在应用设置中授予了权限。
-
@blackapps 我无法将函数设为静态,因为 checkSelfPermission 不是静态函数。它不能从静态上下文中引用。正如我所说,这在 3-4 天之前按预期工作,然后突然停止工作。