Я пытаюсь получить изображение из приложения галереи из одной из папок синхронизированных фотографий 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 }}
Здесь поле dat, кажется, правильно передает Uri, но когда я пытаюсь получить местоположение изображения, происходит сбой со следующей ошибкой.
W/GalleryProvider(14381): unsupported column: _data
Похоже, у поставщика контента для альбомов Picasa нет поля данных _.
Код для получения местоположения:
// 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();
Единственными столбцами, которые поддерживаются для этого изображения, являются :[пользовательская _учетная запись, picasa _идентификатор, _отображение _имя, _размер, тип mime _, дата съемки, широта, долгота, ориентация]
Как мы получаем фактическое местоположение этого изображения. И если мы не должны работать с этим изображением, эти изображения вообще не должны показываться пользователю.
Намерение запустить приложение галереи:
Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT);