【发布时间】:2021-11-26 10:58:36
【问题描述】:
我需要获得MANAGE_ALL_FILES_ACCESS_PERMISSION 才能从我的应用程序中下载和安装 APK。
当我以 SDK 27 及更低版本为目标时,一切正常,当我声明时
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在清单中并通过ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);请求许可
但现在我需要以 SDK 30 为目标,这意味着 WRITE_EXTERNAL_STORAGE 已被弃用并且不适用于 API 版本 29 和 30。
我一直在尝试找到一种解决方法,我能想到的一种方法是启动 Intent 以允许用户自己打开权限,但我无法让它工作。
我正在使用的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
try {
Uri uri = Uri.parse("package:" + BuildConfig.APPLICATION_ID);
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, uri);
startActivity(intent);
} catch (Exception ex){
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivity(intent);
}
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
100);
}
以及我在尝试打开意图时遇到的错误:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION }
错误来自 catch 块,但 Exception ex 给出了相同的错误。
我做错了什么,或者我正在使用的当前手机(XCover 4s Android 10)上不允许这样做。
【问题讨论】:
-
catch (Exception ex)您没有打印堆栈跟踪,也没有记录 ex.getMessage()。那你知道什么? -
the error that I get when trying to open intent:那是在尝试第二个意图时。 -
need to get the MANAGE_ALL_FILES_ACCESS_PERMISSION to be able to download and install APK's from my application.我对此表示怀疑。不用我想你也可以做这样的事情。 -
I am using (XCover 4s).但不告诉该设备的 Android 版本。 -
一般来说,设备制造商不需要支持所有可能的
SettingsIntent操作。所以,我的猜测是您的设备不支持那些所有文件权限Intent操作。
标签: java android android-intent android-manifest android-permissions