当我试图在应用程序之间共享一些文件时,我遇到了一些问题。在应用程序A中,可以选择通过openDocument()打开现有文件
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.OpenDocument()
) {
// In short, preserve returned uri
uri = it
}
...
onClick = {
launcher.launch(arrayOf("text/plain"))
},然后,应用程序A可以通过以下方式与其他应用程序共享uri:
val shareIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, uri)
type = "text/plain"
}
context.startActivity(Intent.createChooser(shareIntent, "Share test"))因为从SAF返回的Uri只是以"content://“开头,所以此处不使用FileProvider。
然后发生了一件蠢事。对于某些应用程序,它工作得很好;但是对于其他应用程序,我总是收到一条消息,说文件不存在,或者不能正确地共享。例如,我得到一个uri,如:content://com.android.providers.downloads.documents/document/442
假设它的正确文件名是some.txt,但是在接受共享文件的应用程序B中,文件名被误认为是没有扩展名的442。
我想知道是什么导致了这个问题。是我的代码,SAF的,还是其他应用的错?我该怎么纠正呢?
我的SDK版本是32,我正在为应用程序A使用。
发布于 2022-09-24 14:41:44
但是对于其他人,我总是收到一条消息,说文件不存在,或者它不能被正确地共享。
您没有做任何事情来授予其他应用程序能够读取该Uri标识的内容的权限。最好的方法是使用ShareCompat.IntentBuilder来创建Intent。或者,使用addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)。有关更多信息,请参见这篇博客文章。
是我的代码,SAF的,还是其他应用的错?
就“一条声明文件不存在的消息”而言,这是因为前面提到的权限问题。
关于“文件名被误认为是没有扩展名的442”,如果一旦解决了权限问题,这个错误就不会清除,那么bug就在另一个应用程序中了。
https://stackoverflow.com/questions/73837974
复制相似问题