无法访问 API-29 中的外部存储
Posted
技术标签:
【中文标题】无法访问 API-29 中的外部存储【英文标题】:Can't access external storage in API-29 【发布时间】:2020-06-09 12:32:48 【问题描述】:以下代码在较低的 API-29 中运行良好。但是在使用 API-29 时,它会拒绝访问外部存储错误。
public void persistFile(byte[] bytes, String path, String fileName) throws IOException
OutputStream fOut = null;
File picDirectory = new File(path);
File file = new File(path, fileName);
fOut = new FileOutputStream(file);
fOut.write(bytes);
fOut.flush();
fOut.close();
androidManifest.xml
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
【问题讨论】:
【参考方案1】:在 Android 10 上,您的应用私有目录之外的文件路径默认没有价值,您可以暂时启用 requestLegacyExternalStorage 直到 Android 11(现已推出预览版)
见https://developer.android.com/training/data-storage
今后最好只使用媒体存储或存储访问框架
https://developer.android.com/training/data-storage/shared
【讨论】:
【参考方案2】:在清单应用标签中添加android:requestLegacyExternalStorage="true"
。
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
【讨论】:
抱歉,我误会了:一旦您的targetSdkVersion
升至 30
或更高版本(或当前开发者预览版中的 "R"
),这将无法在 Android 11 上运行。见developer.android.com/preview/privacy/storage#scoped-storage
谢谢。我看到了。 :(以上是关于无法访问 API-29 中的外部存储的主要内容,如果未能解决你的问题,请参考以下文章