Ved*_*agh 3 android android-storage
所以我已经在这里坐了 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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,每当我第一次打开BaseActivity具有此代码的活动 ( ) 时,它都会按预期工作并请求用户获得存储权限。但是,在此活动中的片段中,我想在其中访问文件,每当我调用此方法时,它都开始返回 false。我已经公开了这个方法,它曾经根据情况返回真/假。这是我检查 Fragment 中是否授予权限的方法。
if (!((BaseActivity) getActivity()).isStoragePermissionGranted()) {
Toast.makeText(getActivity(), getString(R.string.storagePermissionError), Toast.LENGTH_LONG).show();
break;
}
Run Code Online (Sandbox Code Playgroud)
我在compileSdkVersion和targetSdkVersion28,所以范围的外部存储权限不应该成为问题。我在这里做错了什么?为什么即使我 100% 为我的应用程序授予了 STORAGE 权限,isStoragerPermissionGranted()方法也总是返回false?
所以我发现了这个应用程序有什么问题。问题是 Vungle 广告 SDK,它设置了
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
Run Code Online (Sandbox Code Playgroud)
根据https://developer.android.com/guide/topics/manifest/uses-permission-element#maxSdk,WRITE_EXTERNAL_STORAGE即使直接在“设置”中设置,系统也不会授予权限。
所以这个 SDK 设置了这个标签,而且很难找到,因为它在Merged Manifest 中,我很幸运地在那里发现了这个东西。
要在不从您的应用程序中删除 SDK 的情况下克服此问题,请执行以下操作:添加 tools:remove="android:maxSdkVersion"
所以它变成了这样:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:remove="android:maxSdkVersion"/>
Run Code Online (Sandbox Code Playgroud)
到maxSdkVersion您自己设置的标签Manifest.xml。
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |