首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:如何共享从SAF返回的Uri?

Android:如何共享从SAF返回的Uri?
EN

Stack Overflow用户
提问于 2022-09-24 14:27:55
回答 1查看 13关注 0票数 0

当我试图在应用程序之间共享一些文件时,我遇到了一些问题。在应用程序A中,可以选择通过openDocument()打开现有文件

代码语言:javascript
复制
val launcher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.OpenDocument()
    ) {
        // In short, preserve returned uri
        uri = it
    }
...
onClick = {
    launcher.launch(arrayOf("text/plain"))
},

然后,应用程序A可以通过以下方式与其他应用程序共享uri:

代码语言:javascript
复制
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使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-24 14:41:44

但是对于其他人,我总是收到一条消息,说文件不存在,或者它不能被正确地共享。

您没有做任何事情来授予其他应用程序能够读取该Uri标识的内容的权限。最好的方法是使用ShareCompat.IntentBuilder来创建Intent。或者,使用addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)。有关更多信息,请参见这篇博客文章

是我的代码,SAF的,还是其他应用的错?

就“一条声明文件不存在的消息”而言,这是因为前面提到的权限问题。

关于“文件名被误认为是没有扩展名的442”,如果一旦解决了权限问题,这个错误就不会清除,那么bug就在另一个应用程序中了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73837974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档