gpt4 book ai didi

android - Intent 与 ACTION_VIEW 和 uri 指向 EXTRA_STREAM 中的 ParcelFileDescriptor

转载 作者:行者123 更新时间:2023-11-29 17:50:33 25 4
gpt4 key购买 nike

我应该如何形成在第 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);

然后我像往常一样为这个 Intent 创建一个选择器,这不是问题..我的问题是,虽然我在选择器中看到了例如照片应用程序,但我无法打开其中的文件。它只能打开包含我的图像的图库。当我使用发送操作时它正在工作,gmail、drive、dropbox 等应用程序......所有这些都能够正确读取来自提供商的图像。此外,Skitch 似乎是我测试过的唯一一款能够使用 Intent.ACTION_VIEW 操作打开图像的应用程序..

请不要告诉我我应该只发送 URI,我真的需要将文件作为流提供,或者以某种方式作为一系列字节提供(IPC 限制可能会反对这一点)。我无法将文件保存到公共(public)目录。

最佳答案

所以问题是在两个单独的方法调用中设置 Intent 类型和数据。我不知道的是 Intent.setType() 清除了它的数据,而 Intent.setData() 清除了它的类型..

当我通过 Intent.setDataAndType() 方法调用设置数据和类型时,它甚至适用于指向流的 URI。

不幸的是,最终的实现仍然无法在所有地方完美运行。它适用于默认的 android 图库应用程序、G+ 照片应用程序、QuickPic、索尼图库应用程序,但它不适用于默认的 HTC 图库,也不适用于默认的三星图库。遗憾的是,它实际上不太依赖于我的实现,而是取决于它如何在第 3 方查看器应用程序中实现。

关于android - Intent 与 ACTION_VIEW 和 uri 指向 EXTRA_STREAM 中的 ParcelFileDescriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com