Uri, возвращенный после того, как ACTION_GET_CONTENT из галереи не работает в setImageURI () ImageView - PullRequest
11 голосов
/ 09 марта 2012

Я извлекаю Uri изображения из галереи, используя

Intent intent = new Intent();  
intent.setType("image/*");  
intent.setAction(Intent.ACTION_GET_CONTENT);  
startActivityForResult(Intent.createChooser(intent, "Choose Picture"), requestCode);

и пытаюсь отобразить изображение здесь

imageView.setImageURI(uri);

, URI - это Uri изображения, полученного в onActivityResultintent.getData ().

, но изображение не отображается.Также для

File file=new File( uri.getPath() );

file.exists () возвращает false.

Ответы [ 2 ]

27 голосов
/ 23 апреля 2012

Проблема в том, что вы получаете Uri, но из этого URI вы должны создать растровое изображение для отображения в вашем ImageView.Существуют различные механизмы, чтобы сделать то же самое, среди них этот код.

Intent intent = new Intent();  
intent.setType("image/*");  
intent.setAction(Intent.ACTION_GET_CONTENT);  
startActivityForResult(Intent.createChooser(intent, "Choose Picture"), 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if(resultCode==RESULT_CANCELED)
    {
        // action cancelled
    }
    if(resultCode==RESULT_OK)
    {
        Uri selectedimg = data.getData();
        imageView.setImageBitmap(MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedimg));
    }
}
1 голос
/ 03 сентября 2016

Запустите программу выбора изображений галереи

Intent intent = new Intent();
// Show only images, no videos or anything else
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// Always show the chooser (if there are multiple options available)
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);

PICK_IMAGE_REQUEST - код запроса, определенный как переменная экземпляра.

private int PICK_IMAGE_REQUEST = 1;

Показать выбранное изображение в упражнении / фрагменте

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {

        Uri uri = data.getData();

        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
            // Log.d(TAG, String.valueOf(bitmap));

            ImageView imageView = (ImageView) findViewById(R.id.imageView);
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ваш макетнужно будет иметь ImageView как это:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView" />
...