Файл не существует из-за проблемы с намерением галереи?

Я получаю изображение из галереи, используя намерение ACTION_PICK: -

    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(intent, 112);

и в onActivityResult() я получаю изображение с помощью getData(), которое возвращает мне uri: - /external/images/media/6097

Теперь, когда я устанавливаю этот uri в изображении с помощью метода setImageUri() изображения, изображение отображается, но когда я создаю файловый объект для загрузки этого изображения на сервер: -

File imageFile = new File(uri);

Пишет, что файл не существует. imageFile.exists() возвращает ложь.

Я не знаю, где проблема. Я пробовал это на genymotion и на устройстве, но результат тот же. В манифесте я дал разрешения: -

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

person Rahul Gupta    schedule 15.04.2015    source источник
comment
Да, потому что, во-первых, ваш URL-адрес неверный, он должен быть с расширением файла. Могу ли я узнать, на каком уровне API эта проблема?   -  person Govind Rathod    schedule 15.04.2015
comment
Попробуйте получить абсолютный путь от uri.   -  person Haresh Chhelana    schedule 15.04.2015
comment
Да, точно так же, как сказал @HareshChhelana. кем че хареш бхаи?   -  person Govind Rathod    schedule 15.04.2015
comment
Пожалуйста, подключите мобильный телефон к системе и проверьте размер изображения. Размер изображения может быть 0 байт, поэтому файл с ошибкой не существует.   -  person Sukumar Nagarajan    schedule 15.04.2015


Ответы (1)


Попробуйте получить абсолютный путь из uri и создать экземпляр файла, используя абсолютный путь вместо uri :

 public String getAbsolutePath(Uri uri) {
        if (Build.VERSION.SDK_INT >= 19) {
            String id = "";
            if (uri.getLastPathSegment().split(":").length > 1)
                id = uri.getLastPathSegment().split(":")[1];
            else if (uri.getLastPathSegment().split(":").length > 0)
                id = uri.getLastPathSegment().split(":")[0];
            if (id.length() > 0) {
                final String[] imageColumns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION};
                Uri tempUri = getUri();
                Cursor imageCursor = getContentResolver().query(tempUri, imageColumns, MediaStore.Images.Media._ID + "=" + id, null, null);
                if (imageCursor.moveToFirst()) {
                    return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
                } else {
                    return null;
                }
            } else {
                return null;
            }
        } else {
            String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Images.Media.ORIENTATION};
            Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
            if (cursor != null) {
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            } else
                return null;
        }

    }
person Haresh Chhelana    schedule 15.04.2015