我需要得到MANAGE_ALL_FILES_ACCESS_PERMISSION
才能从我的应用程序下载并安装APK。
当我以SDK27和更低版本为目标时,一切正常,当我声明
<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);
}
当我尝试打开Intent时,我得到的错误是:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION }
错误来自catch块,但Exception ex
给出了相同的错误。
我做错了什么,或者这只是不允许在目前的手机我正在使用(XCover 4S Android 10).
2条答案
按热度按时间1qczuiv01#
得到存储许可的答案对我很有效。
我不得不更改
Manifest.permission. strings
,所以不是我使用的问题中所写的内容。或者类似地,可以使用:
然后,获得允许用户安装
Apps from unkown sources
的提示:olmpazwi2#
当我试图导航用户直接在应用程序屏幕上启用所有文件访问权限时,我遇到了这个问题。
这个问题的解决方案是添加包名,如下所示: