我正在尝试通过ACTION_SEND意图从Android图库接收一张图片。我已经设置了正确的意图过滤器并且图库能够打开我的应用程序。现在我想知道如何获取图像数据。我在互联网上找不到任何关于如何完成此操作的示例。我想路径应该在intent.getData()中,但是我该如何从图库中获取这张图片呢?
我正在尝试通过ACTION_SEND意图从Android图库接收一张图片。我已经设置了正确的意图过滤器并且图库能够打开我的应用程序。现在我想知道如何获取图像数据。我在互联网上找不到任何关于如何完成此操作的示例。我想路径应该在intent.getData()中,但是我该如何从图库中获取这张图片呢?
我在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));
不确定SEND意图,但是当处理从PICK意图返回到MediaStore的照片时,大致如下:
Uri selectedImage = intent.getData();
AssetFileDescriptor fd = getContentResolver()
.openAssetFileDescriptor(selectedImage, "r");
FileInputStream s = fd.createInputStream();
// your image data processing code here
不过要小心 - 你可能会处理5+兆像素的文件,这可能会非常大(特别是如果你需要将它们解压成位图进行处理),而且你的内存相当有限。