微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android:从我的应用程序图像、文档等,...共享一个大文件,而无需在缓存文件夹/临时文件中创建副本

如何解决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 举报,一经查实,本站将立刻删除。