内容提供者消费者的客户端我可以做这样的事情,以获得正确的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的图片不是在文件系统上找到,而是作为内存资源,或者是在运行中生成的。
我可以创建内存映射File
或InputStream
或其他任何内容,这样我就不需要将临时文件保存到磁盘,只是为了能够将其返回给我的内容提供商消费者?
答案 0 :(得分:1)
这很难。 可能能够使用任何可以使用Socket接口的东西。我还没有这样做,但这就是让我这么想的原因:
理论上,Socket可以是一个Internet资源,或者大多数东西......如果你愿意在Socket级别工作。我可能只是放弃并创建临时文件。也许这让我变得胆怯。
答案 1 :(得分:1)
从android-9开始,你可以使用ParcelFileDescriptor创建一个管道。你可以填充最多64k并完成它,或者你可以设置另一个线程在读取后填充它。有关详细信息,请参阅此处的答案:
Custom ContentProvider - openInputStream(), openOutputStream()