MediaStore.Video.Thumbnails.getThumbnail () возвращает ноль

1

У меня есть следующий код;

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.

Любая помощь будет очень благодарна вам.

Теги:

1 ответ

2
Лучший ответ

Генерация миниатюр не гарантируется, так как часть, создающая миниатюры, не может сделать это для некоторых видеокодеков. В этом случае возвращенный 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: Идентификатор оригинального изображения, связанный с эскизом интереса".

  • 0
    Переменная curThumb осталась, это должна быть переменная bitmap . Эти видео изначально сделаны на устройстве, а в приложении «Галерея» есть миниатюры. Я не проверял, если bitmap != null потому что, если он iv.setImageBitmap() null и передан iv.setImageBitmap() он не iv.setImageBitmap() исключение. Но я знаю, что это нулевая переменная.
  • 0
    Я думаю, что нашел вашу ошибку. Смотрите обновленный ответ.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню