【问题标题】:Launch intent viewer to display image from url启动意图查看器以显示来自 url 的图像
【发布时间】:2010-06-01 16:43:52
【问题描述】:

我有一张图片的网址。我需要做的是使用意图启动图像的默认图像查看器。

我尝试使用以下方式启动它:

Uri uri = Uri.parse("http://www.google.com/intl/en_ALL/images/srpr/logo1w.png");  
Intent it = new Intent(Intent.ACTION_VIEW);
it.setDataAndType(uri, "image/*")
startActivity(it);

但它不起作用。如果我没有指定数据类型,则意图启动浏览器,因为数据是一个 url。它基本上可以工作(因为您可以在浏览器上看到图像),但我想让画廊为我显示图像。

我也可以将图像下载到位图中,但我仍然不知道如何使用图库显示位图(如果可能的话)。有什么想法吗?

编辑:我尝试将位图保存到缓存中,然后在该文件上启动查看器,但它不起作用。你能在我的代码中发现任何错误吗? (Utilities 类是我写的一个类。该方法只是创建 Bitmap。它可以工作,这不是问题)

File temp = File.createTempFile("tempImage", ".jpg", getContext().getCacheDir());
Bitmap bmp = Utilities.loadBitmap(largeUrl.toString());
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(temp));
bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.close();
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(temp), "image/jpg");
((Activity) getContext()).startActivity(intent);

编辑 2:我决定我可能需要下载的图像,所以我决定先将它们保存在 sd 卡上。这产生了其他问题。我问了new question,因为这是一个不同的问题。

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:

    也许图库要求将图像保存到内存中。

    为什么不将图像下载到位图中,然后将其保存为文件,然后在该文件上启动图像意图?

    (如果您不希望该文件之后保留,您可以将其保存在您的应用数据目录中)

    【讨论】:

    • 我希望能够在不保存东西的情况下做到这一点,但我试过了,但它不起作用。你能看看我编辑的问题并发现任何错误吗?
    • 两个 cmets:(1) 在临时文件输出之前,您对其执行 setDataAndType。为什么不检索保存的文件,然后将其添加到意图中? (2)当你说“它不起作用”时,结果或异常是什么?
    • 输出之前是什么意思?我压缩位图,关闭输出流,然后创建意图...
    • 我的意思是你应该看看从缓存目录中检索文件是否有效(而不是使用那个'temp'变量)。尝试在 out.close() 之后检索它并将其发送到意图。另外,你没有回答我的第二个问题。当您尝试上述代码时,当前发生了什么?
    • 我创建了一个衍生问题,基于我发布异常的 adb logcat 输出的问题。我也改变了创建图像文件的方式(而不是编码位图,我只是从服务器下载 jpeg 文件)。试试我在这个问题中包含的链接,看看另一个,如果你能提供帮助,那就太好了。
    【解决方案2】:

    您的代码很好,但您需要将图像保存在 sd 卡(“临时”文件)上,以便照片查看器工作。在 1.5、1.6、2.1 上测试。

    【讨论】:

      【解决方案3】:

      你可以试试这个代码,让 gridview onItemClickListner 显示在默认图库应用中

      OnItemClickListener myOnItemClickListener = new OnItemClickListener() {
      
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position,
      
              Intent it = new Intent(Intent.ACTION_VIEW);
              it.setDataAndType(Uri.parse("file://" + (String) parent.getItemAtPosition(position)), "image/*");
              startActivity(it);
          }
      };
      

      这对我有用:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-04
        • 2021-09-07
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多