Android 10 读写权限适配申请
Android 23开始,读写系统内部文件需要开始权限申请,本文介绍如何在Android29以上读写文件申请权限,如果项目中 build.gradle 的targetSdkVersion >= 29 ,只在Manifest文件中添加文件读写权限,会出现读写问题,如果targetSdkVersion = 29,通过在Manifest文件中设置requestLegacyExternalStorage=“true” 能解决问题,当targetSdkVersion >30 以后,要申请所有文件权限才能获取到写入权限。
AndroidManifest添加权限设置
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
<application
...
android:requestLegacyExternalStorage="true">
先判断又没有所有文件读写权限,切记不可直接申请文件读写权限,一样失败
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// 先判断有没有权限
if (Environment.isExternalStorageManager()) {
// writeFile()
} else {
val intent = Intent(ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent!!.data = Uri.parse("package:" + getPackageName())
startActivityForResult(intent, 1000)
}
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
requestPermissions(
arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO,
), 1
)
}
申请所有文件读写权限成功之后,可以开始文件读写。最近在学习音视频开发,在学习音频编码的过程中发现了此坑,此前在蓝牙开发中也出现过类似问题,谨以此文记录。