我正在编写一个与RESTful服务交互的Android应用程序。该Web服务基本上是文件系统的前端,并提供元数据以及对文件的CRUD访问。我的应用程序检索元数据,并通过ContentProvider将其公开给第三方应用程序。
我需要添加功能,使运行在与我的应用程序相同的设备上的第三方应用程序能够通过与我的应用程序进行请求/响应(而不是直接与服务器)来CRUD实际文件。这意味着他们需要通过我的应用程序发送或接收文件的内容(通常为XML或图像)。
我考虑了两种实现方法:
选项1-使用ContentProvider.openFile 这似乎是为第三方应用程序提供从我的ContentProvider读取文件的明显选择。但当这些应用程序需要通过我的ContentProvider创建或更新文件时,情况开始变得棘手。我需要一个回调来知道何时将新文件/更改的文件发送回服务器。我认为我可以使用FileObserver来实现这个目的。
选项2-通过服务使用Messenger 使用这种方法,我可以通过
选项3-混合方法
我认为使用
混合方法似乎非常强大,但实现起来最复杂。文件实际上并没有被传递,因此性能应该很好。然而,我担心这是过度设计解决方案。
我需要添加功能,使运行在与我的应用程序相同的设备上的第三方应用程序能够通过与我的应用程序进行请求/响应(而不是直接与服务器)来CRUD实际文件。这意味着他们需要通过我的应用程序发送或接收文件的内容(通常为XML或图像)。
我考虑了两种实现方法:
选项1-使用ContentProvider.openFile 这似乎是为第三方应用程序提供从我的ContentProvider读取文件的明显选择。但当这些应用程序需要通过我的ContentProvider创建或更新文件时,情况开始变得棘手。我需要一个回调来知道何时将新文件/更改的文件发送回服务器。我认为我可以使用FileObserver来实现这个目的。
选项2-通过服务使用Messenger 使用这种方法,我可以通过
Messenger
在我的应用程序和客户端应用程序之间发送文件。文件必须通过一个Bundle
传递,所以我不确定传输它们的最佳格式是什么(File
,FileDescriptor
,字节数组,还是其他?)。如果文件变得很大,我不确定是否会出现问题。选项3-混合方法
- 使用外部存储上的文件夹作为投放箱
- 通过
Messenger
/Service
通信CRUD请求和投放箱内容 - 使用
ContentProvider
存储请求状态 - 第三方应用程序通过
ContentObserver
接收状态更新
我认为使用
ContentProvider
将是理想的解决方案,但似乎API并不完全支持我的用例。我担心尝试走这条路可能会导致笨拙的实现。如果我选择Messenger
和Service
方法,我不确定通过Bundle
传输文件的最强大的方式是什么。混合方法似乎非常强大,但实现起来最复杂。文件实际上并没有被传递,因此性能应该很好。然而,我担心这是过度设计解决方案。
如何在同一台Android设备上运行的应用程序之间传输文件是最佳方法? 当然,我也可以接受我没有在问题中概述的其他选项。