У меня есть следующий код;
String[] projection = { MediaStore.Video.VideoColumns._ID, MediaStore.Video.VideoColumns.DATA };
//String selection = MediaStore.Video.VideoColumns.KIND + "=" + MediaStore.Video.VideoColumns.;
String sort = MediaStore.Video.VideoColumns._ID + " DESC";
Cursor myCursor = getActivity().managedQuery(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, sort);
try
{
myCursor.moveToFirst();
Log.d("VIDEO_URI", intent.getDataString());
Bitmap bitmap = MediaStore.Video.Thumbnails.getThumbnail(
getActivity().getContentResolver(), myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Video.VideoColumns._ID)),
MediaStore.Video.Thumbnails.MICRO_KIND,
(BitmapFactory.Options) null );
ImageView iv = (ImageView) getActivity().findViewById(R.id.attached_media_image);
//Log.d("IMAGE", curThumb.toString());
iv.setImageBitmap(bitmap);
}
catch (Exception e) {
// TODO: handle exception
Log.e("ERROR", e.toString());
}
Я получаю следующее в своем LogCat, когда это выполняется;
03-13 12:05:14.740: D/VIDEO_URI(7269): content://media/external/video/media/474
Но он не устанавливает образ iv ни в чем, и когда я пытаюсь запустить Log.d("IMAGE", curThumb.toString()); строка, которая закомментирована в этом примере, выдает исключение null.
Любая помощь будет очень благодарна вам.
Генерация миниатюр не гарантируется, так как часть, создающая миниатюры, не может сделать это для некоторых видеокодеков. В этом случае возвращенный Bitmap
будет null
.
bitmap != null
?curThumb
, я не вижу определения этого в вашем коде.Изменение: ваша ошибка заключается в том, что вы используете идентификатор из таблицы миниатюр, а не идентификатор видео. Все, что вам нужно сделать, это получить битмап следующим образом:
Bitmap bitmap = MediaStore.Video.Thumbnails.getThumbnail(
getActivity().getContentResolver(),
ContentUris.parseId(intent.getData()),
MediaStore.Video.Thumbnails.MICRO_KIND,
(BitmapFactory.Options) null );
Api Doc говорит: "origId: Идентификатор оригинального изображения, связанный с эскизом интереса".
curThumb
осталась, это должна быть переменнаяbitmap
. Эти видео изначально сделаны на устройстве, а в приложении «Галерея» есть миниатюры. Я не проверял, еслиbitmap != null
потому что, если онiv.setImageBitmap()
null и переданiv.setImageBitmap()
он неiv.setImageBitmap()
исключение. Но я знаю, что это нулевая переменная.