我应该如何形成在第三方观看者中显示我的应用内容的正确方法是什么?我需要在图库(或任何其他图像查看器)中显示图像,在某些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,驱动器,保管箱等应用程序时,它正在工作..所有这些都能够正确地从提供商处读取图像。
此外,Skitch似乎是我测试过的唯一一款能够使用Intent.ACTION_VIEW
动作打开图像的应用程序..
请不要告诉我我应该发送URI,我真的需要将文件作为流提供,或者以某种方式提供字节系列(IPC限制可能会对此提出反对)。我无法将文件保存到公共目录。
答案 0 :(得分:3)
所以问题是在两个单独的方法调用中设置了Intent类型和数据。
我不知道的是Intent.setType()
清除其数据并Intent.setData()
清除其类型..
当我通过Intent.setDataAndType()
方法调用设置数据和类型时,它甚至适用于指向流的URI。
不幸的是,最终的实施仍无法在任何地方完美运行。 它适用于默认的android gallery应用程序,在G + Photos应用程序,QuickPic,索尼库应用程序中,但它在默认的三星库中默认的HTC库中不起作用。 很遗憾,它实际上并没有太多依赖于我的实现,而是如何在第三方查看器应用程序中实现它。