【发布时间】:2014-04-19 13:01:29
【问题描述】:
我应该如何形成在第 3 方查看者中显示我的应用内容的意图的正确方法是什么?我需要在画廊(或任何其他图像查看器)中显示图像,在某些 pdf 阅读器中显示 pdf,..
数据通过实现 openFile() 方法并返回输出管道的内容提供程序获取服务器..
ParcelFileDescriptor[] pipe=ParcelFileDescriptor.createPipe();
...
ParcelFileDescriptor.AutoCloseOutputStream stream = new ParcelFileDescriptor.AutoCloseOutputStream(pipe[1]);
PipeThread pipeThread = new PipeThread(fileContents, stream);
pipeThread.start();
return pipe[0];
对于图片我使用这个:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, uri);
然后我像往常一样为此意图创建一个选择器,这不是问题..
我的问题是,尽管我在选择器中看到了例如照片应用程序,但我只是无法打开其中的文件..它只是打开带有我的图像的画廊。
当我使用发送操作时,它正在工作,像 gmail、drive、dropbox 等应用程序都能够正确地从提供程序读取图像。
此外,Skitch 似乎是我测试过的唯一一款能够使用Intent.ACTION_VIEW 操作打开图像的应用程序。
请不要告诉我我应该只发送 URI,我确实需要将文件作为流或以某种方式作为一系列字节提供(IPC 限制可能会反对这一点)。我无法将文件保存到公共目录。
【问题讨论】:
标签: android android-intent stream android-contentprovider