Android - 从图库中选择图像并将其存储在文件类型变量中

时间:2014-04-15 04:43:42

标签: android file upload dropbox image-gallery

我是Android开发的新手。我希望从Android设备的图库中选择图像或视频。将其存储在File类型的变量中。我这样做,因为我需要使用我的应用程序中的Android API在 dropbox 上传图像/视频。构造函数接受文件类型的第四个参数。我不确定,作为文件传递什么,因为我搜索的所有示例都使用 url 显示在ImageView中选择的图像并制作位图。

imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

这是代码,我有。

final Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
//to get image and videos, I used a */"
galleryIntent.setType("*/*"); 
startActivityForResult(galleryIntent, 1);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1 && resultCode == RESULT_OK) {               
    Uri selectedImageUri = data.getData();
    imagepath = getPath(selectedImageUri);                
    }
}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();                
    int columnIndex = cursor.getColumnIndex(projection[0]);
    String filePath = cursor.getString(columnIndex);
    cursor.close();        
    yourSelectedImage = BitmapFactory.decodeFile(filePath);
    return cursor.getString(column_index);
}

3 个答案:

答案 0 :(得分:4)

您只需创建一个File变量,其中包含您从图库中选择的图像路径。将您的OnActivityResult更改为:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1 && resultCode == RESULT_OK) {               
    Uri selectedImageUri = data.getData();
    imagepath = getPath(selectedImageUri); 
    File imageFile = new File(imagepath);
    }
}

答案 1 :(得分:1)

这适用于图像选择。也在 API 29,30 中进行了测试。如果有人需要它。

private static final int PICK_IMAGE = 5;

Intent intent = new Intent(Intent.ACTION_PICK, 
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(Intent.createChooser(intent, "select image"), 
                PICK_IMAGE);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode ==  PICK_IMAGE && resultCode == RESULT_OK) {               
    Uri selectedImageUri = data.getData();
    String selectedImagePath = getRealPathFromURIForGallery(selectedImageUri);
    File imageFile = new File(selectedImagePath);
    }
} 

public String getRealPathFromURIForGallery(Uri uri) {
    if (uri == null) {
    return null;
    }
    String[] projection = {MediaStore.Images.Media.DATA};
    Cursor cursor = this.getContentResolver().query(uri, projection, null, 
    null, null);
    if (cursor != null) {
        int column_index = 
        cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    assert false;
    cursor.close();
    return uri.getPath();
}

答案 2 :(得分:0)

试试这个

你也可以尝试这个

public void onActivityResult(int requestCode, int resultCode, Intent data)
{

    if (requestCode == 1 && resultCode == RESULT_OK && data != null)
    {
        File destination = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis() + ".jpg");
 //You will get file path of captured camera image
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        iv_profile.setImageBitmap(photo);
    }
}