Я пытаюсь получить изображение из приложения галереи из одной из папок из синхронизированных фотографий Google+. После выбора изображения, Uri возвращается обратно правильно. Но когда я пытаюсь получить фактический путь этого образа на устройстве хранения, так что я могу его использовать, он падает. Проблема, по-видимому, связана именно с поставщиком контента picasa.
Протестировано на Nexus S и Nexus 7, а также на других устройствах.
E/AndroidRuntime(14572): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.google.android.gallery3d.provider/picasa/item/5427003652908228690 }}
Здесь поле данных, по-видимому, правильно передает Uri, но когда я пытаюсь найти местоположение изображения, он падает со следующей ошибкой.
W/GalleryProvider(14381): unsupported column: _data
Кажется, что поставщик контента для альбомов Picasa не имеет поля _data.
Код для получения местоположения:
// imageUri is the Uri from above. String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(imageUri, proj,null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String filePath = cursor.getString(column_index); cursor.close();
Единственными столбцами, которые, как представляется, поддерживаются для этого изображения, являются: [user_account, picasa_id, _display_name, _size, mime_type, datetaken, широта, долгота, ориентация]
Как мы получаем фактическое местоположение этого изображения. И если мы не должны работать с этим изображением, эти изображения не должны отображаться пользователю в первую очередь.
Предназначение для запуска приложения галереи:
Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT);