当前位置: 首页 > 知识库问答 >
问题:

Android Q(10)请求访问所有存储的权限。作用域存储

左恺
2023-03-14

在Android10中,需要访问存储的应用程序需要获得访问具体路径的许可。但是像file explorer这样的应用程序可以请求访问根存储的权限,并获得对所有存储的读/写权限。这就是我正在努力做的。

根据Android,我们必须为此使用action_open_document_tree。我的问题是,一切似乎是正确的,但权限没有授予应用程序。

  private void askAndroid10Perm()
    {
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
        intent.addFlags(
                Intent.FLAG_GRANT_READ_URI_PERMISSION
                        | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
                        | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
                        | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
        startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT_TREE);
    }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case REQUEST_CODE_OPEN_DOCUMENT_TREE:
            if (resultCode == Activity.RESULT_OK) {
                Uri treeUri = data.getData();
                int takeFlags = data.getFlags();
                takeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION |
                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

                    Log.i("TAG", "takePersistableUriPermission: " + treeUri);
                    this.getContentResolver().takePersistableUriPermission(treeUri, takeFlags);

                }

            }
    }
}
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

共有1个答案

严瀚昂
2023-03-14

在清单中添加行

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:requestLegacyExternalStorage="true" //Add this Line
    android:label="@string/app_name">

---------<Activity, Sevices or Recivers>----------

</application>
 类似资料:
  • 听说Android Q推出了一个名为“范围存储”的新安全功能,限制外部存储中的访问文件。我的问题是我必须从应用程序中保存一个文本文档到用户指定的位置。这是否需要任何类型的权限,而不是Q设备中的和?

  • 我试图找到所有的mp3文件在存储,但我的应用程序崩溃,我使用logcat看看为什么和问题的权限访问外部存储,但我已经把权限在清单,我不知道为什么不断崩溃。第一个错误: 03-06 14:55:24.553:E/dex2OAT(2796):创建oat文件失败:/data/dalvik-cache/x86/data@app@felipe.cursoandroid.com.musicbox-2@spli

  • 我正在尝试调用我的类来检查存储权限 但问题是,它不让我在一个类中实现它,我得到了以下错误- "类型权限的方法onRequest estPermissionsResult(int, String[], int[])必须覆盖或实现超类型方法" 类型权限的方法requestPermissions(字符串[],int)未定义 这是我的密码- }

  • 我在窗户上用乌龟。当我试图从标准Windows资源管理器的上下文菜单中克隆时,出现以下错误: 请确保您有正确的访问权限和存储库存在 更准确地说,终端的快照如下: 吉特。exe克隆--进度-v“git@arobotdev:\git\AlfaRobot.git“C:\Work\AlfaRobot” 克隆到“C:\Work\AlfaRobot” 权限被拒绝,请重试 权限被拒绝,请重试 权限被拒绝(公钥、

  • 有没有人遇到过这样的情况:当我对一个用户使用管理策略时,它可以工作,但当我使用内联策略时,它说访问被拒绝。我为IAM用户授予了对bucket读取访问权限,即它只能访问bucket。 我也试过这个

  • 我删除了谷歌云存储控制台上的所有权限。现在我无法删除bucket内容或向用户添加权限,即使使用gsutil也是如此。