Android 如何从库中获取图像URI?

Android 如何从库中获取图像URI?,android,Android,我需要从画廊取一张照片。我可以打开gallery来选择图像,但在选择图像后,它不会返回任何内容。我需要将该fileUri发送到另一个活动,并在ImageView上显示它。 我可以做这个相机,就像在按钮上点击它调用相机,然后我捕获图像并发送到另一个活动 但我不明白我用什么做画廊。谁来帮我做这个 更新 这是我用来从相机上获取图像的 这是我用来从图库中获取图像的 但我希望以与captureImage()相同的方式执行此操作,以便将ImageUri发送到其他活动 OnActivityResult方法 我

我需要从画廊取一张照片。我可以打开gallery来选择图像,但在选择图像后,它不会返回任何内容。我需要将该
fileUri
发送到另一个活动,并在ImageView上显示它。 我可以做这个相机,就像在按钮上点击它调用相机,然后我捕获图像并发送到另一个活动

但我不明白我用什么做画廊。谁来帮我做这个

更新

这是我用来从相机上获取图像的

这是我用来从图库中获取图像的 但我希望以与captureImage()相同的方式执行此操作,以便将ImageUri发送到其他活动

OnActivityResult方法

我通过launchUploadActivity()发送数据


提前感谢:)您好,请使用它从您的图库中获取路径

private void openCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
    String currentTimeStamp = dateFormat.format(new Date());
    f = new File(android.os.Environment.getExternalStorageDirectory(), currentTimeStamp);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
    startActivityForResult(intent, 1);
}

private void openGallery() {
    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(Intent.createChooser(intent, "Select File"), REQUEST_GALLERY);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == 1) {
            try {
                String click = f.getAbsolutePath();
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put(User_Detail.KEY_ALBUM_IMAGE_PATH, click);
                values.put(User_Detail.USER_ID, Utlity.user_id);
                values.put(User_Detail.KEY_ID_ALBUM_REF, album_id);
                long loginStat = db.insert(User_Detail.TABLE_4, null, values);
                loadData(album_id);

            } catch (Exception e) {
                e.printStackTrace();
            }

        } else if (requestCode == 2) {

            Uri selectedImage = data.getData();
            String[] filePath = { MediaStore.Images.Media.DATA };
            Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null);
            c.moveToFirst();
            int columnIndex = c.getColumnIndex(filePath[0]);
            picturePath = c.getString(columnIndex);
            if (picturePath != null && picturePath.length() > 1) {
                ContentValues va = new ContentValues();
            } else {
            }
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            String image_path = picturePath;
            ContentValues values = new ContentValues();
            values.put(User_Detail.KEY_ALBUM_IMAGE_PATH, image_path);
            values.put(User_Detail.USER_ID, Utlity.user_id);
            values.put(User_Detail.KEY_ID_ALBUM_REF, album_id);
            long loginStat = db.insert(User_Detail.TABLE_4, null, values);
            loadData(album_id);
            c.close();
            Log.w("path of image from gallery......******************.........", picturePath + "");
        }
    }
}
试试这个, 编写onActivityResult()方法

这是getRealPathFromURI()方法


onActivityResult中的更改:

else if(requestCode == GALLERY_IMAGE_PICK && resultCode == RESULT_OK
        && null != data)
        {
            Uri selectedImage = data.getData();         
            String picturePath = getRealPathFromURI(selectedImage,
                    this);
           Intent i = new Intent(MainActivity.this, UploadActivity.class);
           i.putExtra("filePath", selectedImage);
           i.putExtra("isImage", isImage);
           startActivity(i);
        }
      }
}


public String getRealPathFromURI(Uri contentURI, Activity context) {
        String[] projection = { MediaStore.Images.Media.DATA };
        @SuppressWarnings("deprecation")
        Cursor cursor = context.managedQuery(contentURI, projection, null,
                null, null);
        if (cursor == null)
            return null;
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        if (cursor.moveToFirst()) {
            String s = cursor.getString(column_index);
            // cursor.close();
            return s;
        }
        // cursor.close();
        return null;
    }
从uri获取文件路径

  public String getPath(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
    cursor.close();

    cursor = getContentResolver().query(
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    cursor.moveToFirst();
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    cursor.close();

    return path;
}

你必须开始一个新的意图,startactivitytrace在哪里?你们能把它展示给类外的usDeclare私有文件,并创建两种方法从相机库中选择图像吗。。并根据您修改此代码此处图片路径包含您的图库选择的图像路径,但他想将
uri
发送到其他活动没有问题。。。您可以使用Bundle或putExtra()静态或通过它发送到下一个活动bu从文档中拾取时发生崩溃
private void openCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
    String currentTimeStamp = dateFormat.format(new Date());
    f = new File(android.os.Environment.getExternalStorageDirectory(), currentTimeStamp);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
    startActivityForResult(intent, 1);
}

private void openGallery() {
    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(Intent.createChooser(intent, "Select File"), REQUEST_GALLERY);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == 1) {
            try {
                String click = f.getAbsolutePath();
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put(User_Detail.KEY_ALBUM_IMAGE_PATH, click);
                values.put(User_Detail.USER_ID, Utlity.user_id);
                values.put(User_Detail.KEY_ID_ALBUM_REF, album_id);
                long loginStat = db.insert(User_Detail.TABLE_4, null, values);
                loadData(album_id);

            } catch (Exception e) {
                e.printStackTrace();
            }

        } else if (requestCode == 2) {

            Uri selectedImage = data.getData();
            String[] filePath = { MediaStore.Images.Media.DATA };
            Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null);
            c.moveToFirst();
            int columnIndex = c.getColumnIndex(filePath[0]);
            picturePath = c.getString(columnIndex);
            if (picturePath != null && picturePath.length() > 1) {
                ContentValues va = new ContentValues();
            } else {
            }
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            String image_path = picturePath;
            ContentValues values = new ContentValues();
            values.put(User_Detail.KEY_ALBUM_IMAGE_PATH, image_path);
            values.put(User_Detail.USER_ID, Utlity.user_id);
            values.put(User_Detail.KEY_ID_ALBUM_REF, album_id);
            long loginStat = db.insert(User_Detail.TABLE_4, null, values);
            loadData(album_id);
            c.close();
            Log.w("path of image from gallery......******************.........", picturePath + "");
        }
    }
}
if (resultCode == RESULT_OK) {
        if (requestCode == 1) {
Uri selectedImageURI = data.getData();
imageFile = new File(getRealPathFromURI(selectedImageURI));
}
}
private String getRealPathFromURI(Uri contentURI) {
    String result;
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file path
        result = contentURI.getPath();
    } else { 
        cursor.moveToFirst(); 
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}
else if(requestCode == GALLERY_IMAGE_PICK && resultCode == RESULT_OK
        && null != data)
        {
            Uri selectedImage = data.getData();         
            String picturePath = getRealPathFromURI(selectedImage,
                    this);
           Intent i = new Intent(MainActivity.this, UploadActivity.class);
           i.putExtra("filePath", selectedImage);
           i.putExtra("isImage", isImage);
           startActivity(i);
        }
      }
}


public String getRealPathFromURI(Uri contentURI, Activity context) {
        String[] projection = { MediaStore.Images.Media.DATA };
        @SuppressWarnings("deprecation")
        Cursor cursor = context.managedQuery(contentURI, projection, null,
                null, null);
        if (cursor == null)
            return null;
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        if (cursor.moveToFirst()) {
            String s = cursor.getString(column_index);
            // cursor.close();
            return s;
        }
        // cursor.close();
        return null;
    }
//handling the image chooser activity result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data != null && data.getData() != null) {
        Uri filePath1 = data.getData();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(.getContentResolver(), filePath1);
            profilePic.setImageBitmap(bitmap);
            uploadProfilePic(filePath1);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  public String getPath(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
    cursor.close();

    cursor = getContentResolver().query(
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    cursor.moveToFirst();
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    cursor.close();

    return path;
}