【问题标题】:Child list of getStorageDirectory always return null on Android 11getStorageDirectory 的子列表在 Android 11 上始终返回 null
【发布时间】:2021-10-05 10:23:08
【问题描述】:

我想通过targetSdk=30 应用程序获取/storage 目录的子列表。 因此,我将android.permission.MANAGE_EXTERNAL_STORAGE 权限设置为AndroidManifest.xml,并创建了此代码。
(我不打算分发这个应用程序,所以授予这个权限没有问题。)

<manifest>
    ...
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    ...
</manifest>
Environment.getStorageDirectory().list() // return null

但是,作为代码中的注释,此代码将始终返回 null...

你能帮帮我吗?

(我的英文不太好,所以请通过翻译服务。如果不清楚,请见谅。)

【问题讨论】:

  • 您在任何版本的 Android 上都没有对该目录的读取权限。
  • READ_EXTERNAL_STORAGE 权限缺失。
  • 对于所有 Android 版本,您已读取 /storage 的访问权限,但不适用于 Android 11 设备。
  • 我忘了写我也授予WRITE_EXTERNAL_STORAGE权限。我记得WRITE_EXTERNAL_STORAGE 权限包含READ_EXTERNAL_STORAGE。所以,我认为WRITE_EXTERNAL_STORAGE 没有问题。
  • 感谢许多cmets!从每个人的 cmets 来看,我认为获取 '/storage' 的子列表看起来很困难......那么,是否有任何文档显示在 Android 11 上无法访问 /storage

标签: android permissions android-11


【解决方案1】:

从您的代码中删除 tools:ignore="ScopedStorage" 这一行并检查范围存储的权限。

您需要完全访问存储,因此需要为 android 11 或更高版本的设备获取范围存储。

【讨论】:

  • 谢谢回答!我的应用程序启用了Allow access to manage all files。而且,我已经确认MANAGE_EXTERNAL_STORAGE 正在工作。因为,我的应用程序可以访问除/storage 之外的任何内容。对不起,如果我的回答不正确...
猜你喜欢
  • 2021-04-11
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
相关资源
最近更新 更多