之前有遇到过apk 文件存储报错,当时解决了,后面开发新项目又遇到老错误,只怪自己没有记录.
我们开发app 的时候,有时候会遇到需要缓存到本地问题,
调用
Environment.getExternalStorageDirectory 会报如下错误,即使你申请了权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
java.lang.IllegalArgumentException: Primary directory null not allowed for content://media/external_primary/file; allowed directories are [Download, Documents]
at com.android.providers.media.MediaProvider.ensureFileColumns(MediaProvider.java:4243)
at com.android.providers.media.MediaProvider.ensureUniqueFileColumns(MediaProvider.java:3881)
at com.android.providers.media.MediaProvider.insertFile(MediaProvider.java:4667)
at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:5253)
at com.android.providers.media.MediaProvider.insert(MediaProvider.java:4953)
at com.android.providers.media.MediaProvider.insertFileForFuse(MediaProvider.java:9643)
at com.android.providers.media.MediaProvider.insertFileIfNecessaryForFuse(MediaProvider.java:9738)
2023-12-22 09:28:02.884 0-0 <no-tag> kernel E enabled ext spk pa on
这是因为google 缩小了权限范围,打开setting 我们发现权限确实变小了很多,选择第一个,Allow managment of all files ,就不会有上面问题.
看下源码解释
大概意思就是android 11 以后这么用就不好使了,目标文件,只能存储到相应的文件夹下,picture,music....等,
建议使用的的是具体路径DIRECTORY_DCIM 这个可以更改.
getExternalFilesDir(Environment.DIRECTORY_DCIM)
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)