2009-10-09 77 views
5

的内容提供商消费的客户端,我可以做这样的事情,才能得到正确的InputStream中读取图片:从内容提供者返回内存映射的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的图片是不是要在文件系统中发现的,但作为一个存储资源,或在飞行中产生的。

我可以创建内存映射FileInputStream或其他任何东西,以便我不需要将临时文件保存到磁盘,只是为了能够将其返回给我的内容提供者使用者?

回答

1

这很难。你可能能够逃脱使用任何可以使用Socket接口的东西。我没有做过,但是,这个是什么让我这么认为:

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

和插座,在理论上,是互联网资源,或任何东西......如果你愿意在Socket级别工作。我可能会放弃并创建临时文件。也许这使我成为一个懦夫。

+0

也就是说可能工作的解决方案,但不是我想这样做。我真的希望能够持续使用'ContentResolver#openInputStream()'方法读取各种远程数据。无论服务器如何创建/获取数据。这是一个不向客户端公开服务器实现的问题。 – PeyloW 2009-10-12 09:44:25

+0

@PeyloW你找到了解决办法吗?我也在寻找解决方案。 – Sunny 2012-01-18 22:00:34

+0

@孙尼这不是一个黑客。所以我最终保存了临时文件并发送了文件描述符。 – PeyloW 2012-01-19 08:21:43