使用Intent从图库中获取图像

时间:2017-05-11 12:54:58

标签: android image android-intent gallery

我想使用share命令从Gallery获取图像。

我目前的代码是:

Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        Log.d("Test","Simple SEND");
        Uri imageUri = (Uri)intent.getParcelableExtra(Intent.EXTRA_STREAM);
        if (imageUri != null) {
            InputStream iStream = getContentResolver().openInputStream(imageUri);
        }
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
        Log.d("Test", "Multiple SEND");
    }

imageUri的值是:content:// media / external / images / media / 37

但是函数“openInputStream”会抛出错误“java.io.FileNotFoundException”。

通过以下功能,我可以获得图像的真实路径。

public static String getRealPathFromUri(Context context, Uri contentUri) {
    Cursor cursor = null;
    try {
        String[] proj = { MediaStore.Images.Media.DATA };
        cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

但我不知道如何将其转换为位图。

1 个答案:

答案 0 :(得分:0)

Uri不是Filenew File(imageUri.toString())总是错的。 imageUri.getPath()仅在Uri的方案为file时有效,而在您的情况下,该方案可能为content

使用ContentResolveropenInputStream()获取InputStream标识的文件或内容Uri。然后,将该流传递给BitmapFactory.decodeStream()

另外,请在后台线程上解码位图,以便在此工作进行时不冻结UI。