Я использую намерение выбора изображения, чтобы позволить пользователям выбирать изображение из своей галереи, я получаю его путь и передаю его затем в 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
Если нет способа избежать этой ошибки, есть ли способ вместо этого скрыть фотографии, которые хранятся в Интернете и показывают только локальные?