Ури вернулся после того, как ACTION_GET_CONTENT из галереи не работает в setImageURI() ImageView
Я получаю 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 изображения, полученного в onActivityResult, путем намерения .getData().
но изображение не отображается. Кроме того, для
File file=new File( uri.getPath() );
file.exists() возвращает false.
Ответы
Ответ 1
Проблема в том, что вы получаете Uri, но из этого uri вам нужно создать Bitmap для показа в вашем 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));
}
}
Ответ 2
Вам нужно получить путь от возвращаемого курсора uri. См. Решение здесь: Как конвертировать URI URI в Java URI
Ответ 3
Запустить редактор изображений галереи
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;
Показать выбранное изображение в Activity/Fragment
@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" />