尝试使用以下代码在按钮中逐行保存文件:
rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { fileUri ->
if (fileUri != null) {
Consts.file = fileUri
}
}
try{
val outputStream = context.contentResolver.openOutputStream(Consts.file!!)
outputStream.use {stream->
val writer = OutputStreamWriter(stream)
lineList.forEach{line ->
writer.write(line)
}
writer.flush()
Log.e("Tag","file saved successfully")
}
}catch (e:Exception){
Log.e("Tag","error while saving file ! ",e)
}
并在 AndroidManifest.xml 中添加这些行:
<!--this is for androids above 10-->
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
<!--this is for androids below 10-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我会收到此错误:
java.lang.SecurityException:权限拒绝:写入 >com.android.providers.media.MediaDocumentsProvider uri >content://com.android.providers.media.documents/document/document%3A1000000045 来自 pid=5704,>uid= 10191 需要 android.permission.MANAGE_DOCUMENTS,或 grantUriPermission()
正如错误所说,我在 android 清单文件中添加了 MANAGE_DOCUMENTS 权限,并在写入文件之前添加了 grantUriPermission :
context.grantUriPermission("com.sina.writeeditor" , Consts.file!! , Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
但又出现同样的错误。
使用 GetContent() 获取的文件 uri 不可写。
因此出现 SecurityException。
使用 GetContent() 不需要清单中的任何权限。