我正在尝试将我的应用程序(任何类型的文件)与手机中的另一个应用程序共享(例如,通过“共享”菜单),或者在手机的默认应用程序中预览它,但是我需要这样做,而不需要在临时文件夹或缓存文件夹中创建文件的副本,然后使用路径创建一个意图,就像通常所做的那样。
不同之处在于,我已经在手机中保存了文件,但它存储在一个自定义文件系统中(这是我们正在开发的应用程序,以及它对文件进行加密的其他功能,这就是为什么该文件不在电话中的常规文件夹中)。我可以轻松地获得文件的字节、创建读取器等;但到目前为止,我只找到了通常的方法来完成我所需要的工作:创建一个临时文件,将字节写到它,然后用该文件的路径创建一个意图,等等。
我是不是遗漏了什么?
是否有一种方法来传递,而不是文件的路径,其他类型的抽象,告诉另一个应用程序或Android,用它来获取文件(字节?)从读者那里还是其他类似的地方?
发布于 2021-06-11 11:00:32
我可以轻松地获得文件的字节、创建读取器等;但到目前为止,我只找到了通常的方法来完成我所需要的工作:创建一个临时文件,将字节写到它,然后用该文件的路径创建一个意图,等等。
如果您所说的“创建此文件路径的意图”意味着类似于使用Uri.fromFile(),那么这已经有几年没有起作用了。
是否有一种方法来传递,而不是文件的路径,其他类型的抽象,告诉另一个应用程序或Android,用它来获取文件(字节?)从读者那里还是其他类似的地方?
Uri不是文件。您通过EXTRA_STREAM在ACTION_SEND Intent上提供的ACTION_SEND不必指向文件。事实上,它不应该直接指向文件。
它应该指向ContentProvider。
现在,用于ACTION_SEND的一个常见的ACTION_SEND实现是FileProvider,它是一个知道如何在文件系统上流文件内容的ContentProvider。但是,您不必使用它--您可以创建您自己的ContentProvider,它可以从其他来源流内容。
你可以免费下载我的一本旧版本的书。。它有很多关于ContentProvider的资料,包括关于如何实现定制提供者的两个章节的大约50页。您将更多地使用流样式API而不是数据库样式API。即使如此,示例可能是最接近你所要做的事情。
https://stackoverflow.com/questions/67935612
复制相似问题