你如何在 Android 中请求 MANAGE_EXTERNAL_STORAGE 权限?

新手上路,请多包涵

来自 Android 文档, https://developer.android.com/training/data-storage/manage-all-files#all-files-access

“应用程序可以通过执行以下操作请求用户访问所有文件:

_在清单中声明 MANAGE_EXTERNAL_STORAGE 权限。_

_使用 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 文档内容广泛,但并不是最受新手欢迎的文档。我了解意图,并且知道它们可用于在活动之间切换,但我不知道“意图操作”是什么以及如何使用它来请求权限

原文由 Chris A 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.7k
2 个回答

在科特林中:

     val uri = Uri.parse("package:${BuildConfig.APPLICATION_ID}")

    startActivity(
      Intent(
        Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
        uri
      )
    )

(来自 这个示例项目

您可能习惯于隐式 Intent 。文档要求您使用显式 Intent ,其中一个带有操作字符串,在本例中为 UriUri 将具有 package 方案并通过其应用程序 ID 识别您的应用程序。

该代码片段将启动系统提供的活动,从理论上讲,该活动将使用户选择授予您的应用 MANAGE_EXTERNAL_STORAGE 权限。

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果在Intent中使用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();
}

}

原文由 Kahraman Avut 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题