Android10文件读写适配
2021-04-20 本文已影响0人
紫鹰
android10,读写sd卡文件时报错,java.io.FileNotFoundException: /storage/emulated/0/xxx.txt。当时确认已经申请动态权限且权限已经获取到。实际上是Android10 采取了更严格的文件读写设置造成的。解决方法如下。
manifest 配置,增加android.permission.MOUNT_UNMOUNT_FILESYSTEMS权限,application增加android:requestLegacyExternalStorage="true"配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<application
...
android:requestLegacyExternalStorage="true"
>
</application>
</manifest>
获取动态权限,不再赘述
基地址获取方式appContext!!.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)!!.getPath()取代Environment.getExternalStorageDirectory()
/**
* 文件存储地址,获取基地址方式
*/
fun getDeviceIdFile(): File? {
var sdcardPath: String = MoaApplication.appContext!!.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)!!.getPath()
if (!sdcardPath.isNullOrEmpty()) {
val dir = File(sdcardPath + "/xxx")
dir.mkdirs()
var file = File(dir.path, ".xxx.txt")
return file
}
return null
}