Путь к выбранному изображению пуст - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь получить реальный путь URI.

Сначала я запускаю приложение галереи через намерение:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select picture"), SELECT_IMAGE );

После этого вызывается onActivityResult, где я пытаюсь получить абсолютный путь URI.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        if (resultCode == RESULT_OK) {
            Uri uri;
            if (requestCode == SELECT_IMAGE) {
                final Uri uri_data = data.getData();
                // Get the path from the Uri
                final String path = getPathFromURI(uri_data);
                if (path != null) {
                    File f = new File(path);
                    uri = Uri.fromFile(f);
                }
            }
        }
    } catch (Exception e) {
        Log.e("FileSelectorActivity", "File select error", e);
    }
}

uri_data содержит «content: //com.android.providers.media.documents/document/image%3A67», но в результате путь будет нулевым.

Метод pathFromUri выглядит следующим образом:

private String getPathFromURI(Uri contentUri) {
String res = null;
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
if (cursor.moveToFirst()) {
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    res = cursor.getString(column_index);
}
cursor.close();
return res;
}

Здесь column_index равно 0, но cursor.getString возвращает ноль.

Почему это происходит?

У меня есть разрешение android.permission.READ_EXTERNAL_STORAGE

EDIT: Поэтому я хочу сделать снимок через приложение камеры, а затем пользователь выбирает изображение. Таким образом, файл должен храниться на телефоне (так как я проверяю его на телефоне)

EDIT:

Окей, решение было запросить разрешения во время выполнения ... извините, ребята

...