如何使用Content Provider在两个应用程序之间传递二进制数据?

时间:2011-01-06 22:22:11

标签: android binary-data android-contentprovider

我需要使用Content Provider在两个Android应用程序之间传递一些二进制数据(sharedUserId不是一个选项)。

我不希望将数据(存储为文件的存档,大小小于< 20k)作为文件传递(即覆盖openFile()),因为这需要一些复杂的临时文件方案来应对多个内容提供商访问和正在运行的游戏的并发性。

我想在互斥锁下将文件读入内存,然后以最简单的方式传递二进制数组。 我该怎么做?

由于openFile()的返回类型,似乎无法在内存中创建文件。

query()需要返回一个Cursor。使用MatrixCursor是不可能的,因为它在读取时将String()应用于所有存储的对象。

我需要做什么?实现自定义光标?这个类有30个抽象方法。 我是否读取该文件,将其放入SQLite数据库并返回光标?

这个看似简单的任务的复杂性令人难以置信。

2 个答案:

答案 0 :(得分:2)

为什么不将数据作为Base64字符串提供?

答案 1 :(得分:2)

你尝试过使用溪流吗?这将有效

从文档中: “如果表条目是内容:URI,则永远不要尝试直接打开和读取文件(首先,权限问题会导致失败)。相反,您应该调用ContentResolver.openInputStream()来获取InputStream对象您可以用它来读取数据。“

链接:http://developer.android.com/guide/topics/providers/content-providers.html

如果您使用Intents,可能是这样的:

protected void onActivityResult(int requestCode, int resultCode, Intent intent){
  InputStream is = getContentResolver().openInputStream(intent.getData())
...