我正在编写一个示例应用程序,它实现了 DocumentsProvider 以使用 SAF 框架与其他应用程序共享文件。代码可以在这里找到:DocumentsProvider 示例项目
我在与例如 Gmail 共享所选文件时遇到问题。根据我在 openDocument 中使用的方法(请参阅示例项目中的 openDocument 函数),我会得到各种结果(请参阅上面链接中的代码)。
总之:
1)当我读入文件内容并返回时
ParcelFileDescriptor.open(文件,ParcelFileDescriptor.parseMode(模式))
它适用于 Gmail。这是使用 readFilesUsingOpenDocumment() 函数。
2)当我读入内容并使用createReliablePipe时,我可以在示例应用程序中获取内容,但在Gmail中无法获取内容。这会出现以下异常:
2020-06-10 09:15:31.643 14097-14235/nl.jcraane.myapplication E/AndroidRuntime:致命异常:AsyncTask #2 进程:nl.jcraane.myapplication,PID:14097 原因:java.io.IOException:写失败:EPIPE(断管)
这是使用 readFileUsingReliablePipe() 函数。
3) 当我使用 createReliablePipe 并且我不使用 ASyncTask 时,当传输大量(超过几 Kb)数据时,应用程序会挂起。
是否有人对如何实施 openDocument 有更多见解?理想情况下,我还想通过 URL 下载文件,并在下载完成后将字节流回。是否有可能让调用应用程序知道正在下载(以显示进度条)?createReliablePipe应该如何正确使用?
我确实查看了Samba 文档提供程序,我从中获取了 ASyncTask 解决方案,但不幸的是没有成功。
谢谢!