来自Android,https://developer.android.com/training/data-storage/manage-all-files#all-files-access
“通过执行以下操作,应用程序可以请求用户访问所有文件:
在清单中声明MANAGE_EXTERNAL_STORAGE权限。
使用https://developer.android.com/reference/android/provider/Settings#ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION意图操作将用户引导到系统设置页面,在该页面中,用户可以为应用程序启用以下选项:允许访问来管理所有文件。“
我试过的
我知道如何请求权限的唯一方法是使用ActivityCompat。我试过:
ActivityCompat.requestPermissions(this, new String[]{Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION},1);
和
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.MANAGE_EXTERNAL_STORAGE},1);
两者都不做任何事。
Android文档非常广泛,但并不是最受新用户欢迎的。我理解意图,并知道它们可以用于在活动之间切换,但我不知道“意图操作”是什么以及如何使用它来请求权限
发布于 2021-01-24 23:00:08
在科特林:
val uri = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
startActivity(
Intent(
Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
uri
)
)(来自此示例项目)
您可能已经习惯了隐式Intent。文档要求您使用一个显式Intent,其中一个带有动作字符串,在本例中是一个Uri。Uri将拥有package方案,并通过应用程序ID标识应用程序。
该代码片段将启动一个系统提供的活动,理论上,该活动将允许用户选择授予您的应用程序MANAGE_EXTERNAL_STORAGE权限。
发布于 2021-04-24 01:34:32
如果打算使用Uri,则可以使用Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION而不是Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION.。
if(SDK_INT >= 30){
if(!Environment.isExternalStorageManager()){
Snackbar.make(findViewById(android.R.id.content), "Permission needed!", Snackbar.LENGTH_INDEFINITE)
.setAction("Settings", new View.OnClickListener() {
@Override
public void onClick(View v) {
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);
}
}
})
.show();
}}
发布于 2021-06-28 19:21:16
您可以创建这样的意图:
Intent intent = new Intent(ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID));现在,您可以使用startActivityForResult启动此意图。
final static int APP_STORAGE_ACCESS_REQUEST_CODE = 501; // Any value
startActivityForResult(intent, APP_STORAGE_ACCESS_REQUEST_CODE); 在onActivityResult方法中,可以检查用户是否授予了权限。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK && requestCode == APP_STORAGE_ACCESS_REQUEST_CODE)
{
if (Environment.isExternalStorageManager())
{
// Permission granted. Now resume your workflow.
}
}
}您还可以使用新的ActivityResultAPI通过以下方式启动该活动:
// Initialize the variable in before activity creation is complete.
val storagePermissionResultLauncher = registerForActivityResult(StartActivityForResult(),
ActivityResultCallback<ActivityResult?> {
if (Environment.isExternalStorageManager())
{
// Permission granted. Now resume your workflow.
}
})
// launch the above intent.
storagePermissionResultLauncher.launch(intent)此外,请确保在AndroidManifest.xml中添加此权限项。
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />https://stackoverflow.com/questions/65876736
复制相似问题