Uri.getPath(); возвращает вместо картинки /document/image/156

431
06 февраля 2017, 15:30
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 2);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 2){
        if (resultCode == RESULT_OK){
            if (intent != null) {
                Uri uri = intent.getData();
                String path = uri.getPath();
                document = new File(path);
            }
        }
    }
}

Помогите, а то ничего не пойму. Ожидаю, что путь должен быть /document/image/picture.jpg, а выводит /document/image/156. А выбранная картинка и вовсе лежит в директории storage/sdcard/download/picture.jpg. Результатом должен быть new File ("/storage/sdcard/download/picture.jpg")

Так же использовал этот кусок кода, но он возвращает всегда null:

public String getRealPathFromURI(Context context, Uri contentUri) {
    Cursor cursor = null;
    try {
        String[] proj = { MediaStore.Images.Media.DATA };
        cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}
Answer 1

В новых андроидах вам возвращается не путь на диске, а именно URI для доступа к выбранному файлу через ContentProvider. Для того, чтобы его открыть, используйте функцию ContentResolver.openFileDescriptor().

Если вам нужно содержимое, лучше откройте документированным способом. Если вам все-таки нужен путь к файлу, то вот работающий код: http://stackoverflow.com/a/20559418/1263771

READ ALSO
как работает анимация в javafx

как работает анимация в javafx

пробовал понять читая статьи,не получилось!Прошу объяснить по простому на примере:есть StackPane с именем Mpane нужно увеличить его размер с допустим...

486
default методы в интерфейсе [дубликат]

default методы в интерфейсе [дубликат]

На данный вопрос уже ответили:

430
Ошибка при выполнении sql-запроса. Java. JDBC

Ошибка при выполнении sql-запроса. Java. JDBC

В БД есть таблица user, изначально пустая, создается методом createTable()

383