我想保存一个处理后的音频文件到sdcard,我用的是 Environment.getExternalStorageDirectory().path,点击文件报错,logacat提示
Operation not permitted
App各个版本号
compileSdkVersion = 33
buildToolsVersion = '28.0.2'
minSdkVersion = 21
targetSdkVersion = 33
解决方案:添加文件管理权限,启动Intent,用户自己授予权限
文件路径不能有空格等特殊符号,否则保存失败,是正常的路径就行
第一步:
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
android:minSdkVersion="30" />
第二步:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
startActivity(intent)
return
}
filePath = Environment.getExternalStorageDirectory().path
doHandleMedia(filePath)
}
其他解决办法:
不需要权限,可通过获取下面的目录
getExternalFilesDir
Android/包名/files/xxx
getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).path
sdcard/MUIC/xxx
内部存储空间
getFileDir
data/data/包名/file
getCacheDir
data/data/包名/cache