从图库接收ACTION_SEND意图

8

我正在尝试通过ACTION_SEND意图从Android图库接收一张图片。我已经设置了正确的意图过滤器并且图库能够打开我的应用程序。现在我想知道如何获取图像数据。我在互联网上找不到任何关于如何完成此操作的示例。我想路径应该在intent.getData()中,但是我该如何从图库中获取这张图片呢?

2个回答

15

我在Picasa源代码中找到了这个。它提供了图像的正确路径。

    Intent intent = getIntent();
    if (Intent.ACTION_SEND.equals(intent.getAction())) {
        Bundle extras = intent.getExtras();
        if (extras.containsKey(Intent.EXTRA_STREAM)) {
            Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
            String scheme = uri.getScheme();
            if (scheme.equals("content")) {
                String mimeType = intent.getType();
                ContentResolver contentResolver = getContentResolver();
                Cursor cursor = contentResolver.query(uri, null, null, null, null);
                cursor.moveToFirst();
                String filePath = cursor.getString(cursor.getColumnIndexOrThrow(Images.Media.DATA));

1
这应该放在哪个文件里面,以及在那个文件中的哪个位置? - basickarl

0

不确定SEND意图,但是当处理从PICK意图返回到MediaStore的照片时,大致如下:

    Uri selectedImage = intent.getData();
    AssetFileDescriptor fd = getContentResolver()
            .openAssetFileDescriptor(selectedImage, "r");
    FileInputStream s = fd.createInputStream();
    // your image data processing code here

不过要小心 - 你可能会处理5+兆像素的文件,这可能会非常大(特别是如果你需要将它们解压成位图进行处理),而且你的内存相当有限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接