Мне нелегко получить Thumbnails.getTumbnail для работы с фотографиями picasa на Nexus S, работающем с ICS. Все остальное, похоже, работает, включая получение исходного изображения из picasa и его отображение, но getThumbnail, похоже, не работает. При попытке его использования возникают следующие ошибки:
E/MiniThumbFile( 1852): Got exception when reading magic, id = 5745625138093120418, disk full or mount read-only? class java.lang.IllegalArgumentException
W/MediaProvider( 540): original media doesn't exist or it canceled.
Диск не заполнен, он предназначен для чтения-записи, у приложения есть права на запись в хранилище, и изображение действительно существует на picasa (я могу просмотреть его через приложение Android-андроида).
Тот же код отлично работает на Android 2.3, но он следует немного по-другому, поскольку 2.3, похоже, загружает копию фотографии и передает вам фактический локальный файл://uri для недавно загруженного изображения, а не передает вам контент ://uri.
Это основное мясо кода, о котором идет речь:
public void addImage(Uri uri, boolean local)
{
ContentResolver resolver = getContentResolver();
Uri actualUri = uri;
Log.d(TAG, "addImage: original uri: " + uri.toString());
if(local) {
try {
List<String> uriPath = uri.getPathSegments();
String contentUri = Media.insertImage(resolver, uri.getPath(), uriPath.get(uriPath.size()-1), new String());
actualUri = Uri.parse(contentUri);
}
catch(java.io.FileNotFoundException ex) {
Log.e(TAG, "FileNotFoundException: ");
ex.printStackTrace();
}
}
Log.d(TAG, "addImage: actual uri: " + actualUri.toString());
List<String> uriPath = actualUri.getPathSegments();
long imageId = Long.parseLong(uriPath.get(uriPath.size() -1));
Bitmap thumb = Thumbnails.getThumbnail(resolver, imageId, Thumbnails.MINI_KIND, null);
if(thumb == null) {
Log.e(TAG, "Failed to get thumbnail for our image.");
Toast toast = Toast.makeText(getApplicationContext(), "Failed to get thumbnail for image. Please try again.", Toast.LENGTH_SHORT);
toast.show();
return;
}
uris.add(uri);
bmps.add(thumb);
notifyDataSetChanged();
}
Этот метод называется, когда когда-либо в приложение добавляется новая фотография фотографий. Когда он известен как локальный образ (т.е. Если фотография была сделана изнутри приложения или аргумент данных onActivityResult равен null), локальный параметр имеет значение true, и я пытаюсь получить контент://uri обратно из поэтому мы можем получить действительный идентификатор изображения, чтобы перейти к Thumbnails.getThumbnail. Этот код отлично работает для изображений, полученных из приложения Camera (через startActivityForResult), а также изображений из галереи, которые хранятся локально на устройстве.
Я немного в тупике.
Имела та же проблема, и это была проблема импорта/пакета.
Обязательно используйте правильный класс миниатюр. Есть два. Один для видео и один для изображений.
MediaStore.Images.Thumbnails
MediaStore.Video.Thumbnails
https://developers.google.com/picasa-web/docs/2.0/reference#media_group
Если вам трудно в андроиде добраться до эскизов, обратите внимание на приведенную выше ссылку и api и на медиа: групповой/мультимедийный тег в корне атома. Это родительский элемент или контейнер эскизов, на которые ссылаются в этом сообщении
Итак, чтобы обрабатывать большие пальцы в Android, если вы можете структурировать свой код для фактического использования api (фиды picasa/photos/media: group и т.д.), У вас может быть меньше проблем с ошибками, подобных настоящему.
Пример кода google/android/picasa