6

内容提供者消费者的客户端我可以做这样的事情,以获得正确的 InputStream 来读取图片:

InputStream is = getContentResolver().openInputStream(pictureUri);

这是一个很好的 API,并且在服务器端,实际的内容提供者会调用:

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
  // Open a proper ParcelFileDescriptor, most likely using openFileHelper(uri, mode)
}

但是,如果映射到 URI 的图片不在文件系统上找到,而是作为内存资源,或者动态生成,该怎么办。

我可以创建一个内存映射的FileorInputStream或其他任何东西,这样我就不需要将临时文件保存到磁盘,只是为了能够将它返回给我的内容提供者消费者?

4

2 回答 2

1

这很难。您可能可以使用任何可以使用 Socket 接口的东西。我还没有这样做,但这就是让我这么想的原因:

http://developer.android.com/reference/android/os/ParcelFileDescriptor.html#fromSocket(java.net.Socket)

理论上,Socket 可以是 Internet 资源,或者任何东西……如果您愿意在 Socket 级别工作。我可能会放弃并创建临时文件。也许这让我成为一个懦夫。

于 2009-10-10T05:11:39.827 回答
1

从 android-9 开始,您可以使用 ParcelFileDescriptor 创建管道。您最多可以在其中填充 64k 并完成它,或者您可以设置另一个线程以在读取后填充它。有关更多详细信息,请参见此处的答案:

自定义 ContentProvider - openInputStream()、openOutputStream()

于 2013-02-06T16:45:04.487 回答