gpt4 book ai didi

java - 从 Android 存储访问框架中选取时文件是只读的

转载 作者:行者123 更新时间:2023-12-02 01:22:57 25 4
gpt4 key购买 nike

我正在尝试使用从 Intent 收到的 URI 将文本附加到文件中。当我直接从存储中选择文件时,一切都工作得很好。然而,当我从图片、视频、音乐等分类选择器中选择文件时,就会出现问题......它会抛出 IllegalArgumentException 并表示该文件是只读的。

private fun alterDocument(uri: Uri) {

try {

val subject = subjectField.editText!!.text.toString()
val message = messageField.editText!!.text.toString()
contentResolver.openFileDescriptor(uri, "wa")?.use { it ->
// use{} lets the document provider know you're done by automatically closing the stream
FileOutputStream(it.fileDescriptor).use {
it.write("\n".toByteArray())
it.write(
generateJSON(subject, message).toByteArray()
)
}
}

} catch (e: FileNotFoundException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}

}

有谁知道有什么办法可以解决这个问题吗?提前致谢。

最佳答案

DocumentsProvider 不必授予对其内容的读写访问权限。特别是,MediaDocumentsProvider 没有。

不幸的是,we do not have a way to limit the user to read-write content 。因此,您需要妥善处理此错误,并建议用户从不同的文档提供程序中进行选择。

或者,为了更积极地检测问题,您需要检查文档的标志以查看 FLAG_SUPPORTS_WRITE 是否在其中。

blogged有关此情况的更多信息。

关于java - 从 Android 存储访问框架中选取时文件是只读的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57372876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com