Image Picker Intent - нулевой путь для сохраненных в Интернете фотографий - PullRequest
1 голос
/ 26 мая 2019

Я использую намерение выбора изображения, чтобы позволить пользователям выбирать изображение из своей галереи, я получаю его путь и передаю его затем в 3-ю библиотеку.

В большинстве случаев работает нормально, но если я выбрал изображение из Google Photos (изображение, которое хранится в Интернете), я получу путь null, хотя получу действительный URI для обоих рабочих и не рабочие изображения.

Вот мой намеренный звонок:

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(intent, RESULT_LOAD_IMAGE);

и вот onActivityResult:

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

            Uri uri = data.getData();
            Log.e(getClass().getName(),"file uri = " + uri);

            String[] projection = {MediaStore.Images.Media.DATA};
            Cursor cursor = getActivity().getContentResolver().query(uri, projection,
                    null, null, null);
            if(cursor == null) return;
            Log.e(getClass().getName(),"file cursor = " + cursor);


            int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            Log.e(getClass().getName(),"file columnIndex = " + columnIndex);
            cursor.moveToFirst();



            // The crash happens here
            String photoPath = cursor.getString(columnIndex);
            Log.e(getClass().getName(),"file photo path = " + photoPath);

            cursor.close();
                cropImage(photoPath);

}

А вот логи для рабочего и нерабочего изображения:

Рабочее изображение:

file uri = content: //com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F105681/ORIGINAL/NONE/187859359

файловый курсор = android.content.ContentResolver$CursorWrapperInner@8953964

file columnIndex = 0

путь к файлу фотографии = /storage/emulated/0/DCIM/Camera/IMG_20190523_184830.jpg

Не работает изображение:

file uri = Содержание: //com.google.android.apps.photos.contentprovider/0/1/mediakey%3A%2Flocal%253A4574915c-b4ac-40af-bc08-b1004670cab2/ORIGINAL/NONE/477302338

файловый курсор = android.content.ContentResolver$CursorWrapperInner@59448a4

file columnIndex = 0

путь к файлу фотографии = null

Если нет способа избежать этой ошибки, есть ли способ вместо этого скрыть фотографии, которые хранятся в Интернете и показывают только локальные?

1 Ответ

1 голос
/ 26 мая 2019

Техника в вашем вопросе имеет (как минимум) три проблемы:

  • Не каждая запись MediaStore имеет значение для DATA, как вы видите

  • Не каждое не null DATA значение представляет путь к файловой системе, к которому вы можете получить доступ, поскольку MediaStore может получить доступ к содержимому, которое вы не можете

  • Столбец DATA недоступен на Android Q и выше

В вашем случае библиотека uCrop принимает Uri. Хорошо написанные библиотеки Android знают, как обрабатывать Uri, поэтому вы можете просто передать Uri в библиотеку, и он оттуда его заберет.

...