如何解决Android:从我的应用程序图像、文档等,...共享一个大文件,而无需在缓存文件夹/临时文件中创建副本
我正在尝试将我的应用程序中的文件(任何类型的文件)与手机中的另一个应用程序共享(例如,通过“共享”菜单),或在手机的默认应用程序中预览它,但我需要这样做无需在临时或缓存文件夹中创建文件副本,然后像通常那样使用路径创建意图。
不同之处在于我已经在手机中拥有该文件,但它存储在各种自定义文件系统中(这是我们正在开发的应用程序,除其他外,它会加密文件,这就是为什么文件不在手机的常规文件夹中)。我可以轻松获取文件的字节,创建阅读器等;但到目前为止,我只找到了做我需要的常用方法:创建一个临时文件,将字节写入其中,然后使用该文件的路径创建一个意图,等等。
我错过了什么吗?
有没有办法传递其他类型的抽象,而不是文件的路径,告诉其他应用程序或 Android,使用它从阅读器或类似的东西获取文件(字节?)?
解决方法
我可以轻松获取文件的字节,创建阅读器等;但到目前为止,我只找到了做我需要的常用方法:创建一个临时文件,将字节写入其中,然后使用该文件的路径创建一个意图,等等。
这已经好几年没用了,如果“使用此文件的路径创建一个意图”,您的意思是使用 Uri.fromFile()
。
有没有办法传递其他类型的抽象,而不是文件的路径,告诉其他应用程序或 Android,使用它从阅读器或类似的东西获取文件(字节?)?
Uri
不是文件。您通过 Uri
EXTRA_STREAM
上的 ACTION_SEND
提供的 Intent
不必指向文件。事实上,不应该直接指向一个文件。
它应该指向 to a ContentProvider
。
现在,ContentProvider
的常见 ACTION_SEND
实现是 FileProvider
,它是一个 ContentProvider
,它知道如何流式传输文件系统上的文件内容。但是,您不必使用它 — 您可以创建自己的 ContentProvider
以流式传输来自其他来源的内容。
你可以download for free an older edition of one of my books。它有很多关于 ContentProvider
的材料,包括大约 50 页的两章,重点介绍如何实现自定义提供程序。与数据库风格的 API 相比,您会更多地使用流媒体风格的 API。从袖口上来说,the Pipe
example 可能是最接近您要做的事情的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。