我理解为什么requestLegacyExternalStorage不使用API 30在Android11上工作。然而,当我以API 29为目标时,它在Android11上并不适用。
下面是我观察到的代码级别的差异:
StorageManager::getStorageVolumes能够列出Android 10上的所有卷(包括内部存储和外部存储),但它只列出了Android 11.上的内部存储。
File("/storage").listFiles(),它返回null,这意味着这个路径不存在。我的应用程序旨在浏览外部存储的文件,现在它停止在Android 11上工作,因为由于某种原因,我们无法看到外部存储。
这是我的AndroidManifest.xml
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:requestLegacyExternalStorage="true" >
...这是我的build.gradle
compileSdkVersion 30
buildToolsVersion '30.0.1'
defaultConfig {
minSdkVersion 16
targetSdkVersion 29
...我想知道我是否遗漏了什么,以便使用遗留方式访问Android 11上的外部存储。
更新:@blackapps
File("/storage").listFiles()返回具有路径(如/storage/981B-469E )的外部存储的File对象,并且允许我们列出其中的文件。
Context.getExternalFilesDir()返回路径类似于/storage/emulated/0/Android/data/com.xx.xx/files的File对象
Environment.getExternalStorageDirectory()返回路径类似于/storage/emulated/0的File对象
我无法在像/storage/emulated/0这样的路径中列出文件。
发布于 2021-05-05 10:03:12
Android11已经删除了作用域存储空间,因此,legacyExternalStorage只出现在Android10中,而在Android11中则被忽略,如果您迁移回Android10,那么它就能工作了。
或在AndroidManifest.xml中使用
Manage_External_Storage=真
并请求用户访问所有文件权限。
为了克服这种情况,Google给出了使用其他选项的选项,而他们的文档中没有更多的选项。
https://stackoverflow.com/questions/66783304
复制相似问题