如何从R.raw文件夹中获取视频缩略图?

时间:2013-02-18 08:19:13

标签: android video thumbnails

以下代码无法获取位于R.raw文件夹中的视频的视频缩略图。

我想使用图库来显示视频的缩略图。视频被放入R.raw文件夹(实际上我是Android新手,因此我不知道将这些视频放在哪里,所以我将它们放在R.raw文件夹中)。现在我想获得视频的缩略图。但是有人告诉说缩略图只能从SD卡中获取。这是真的吗?接下来我该怎么办?感谢。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Gallery gallery = (Gallery) findViewById(R.id.gallery);
    final String[] videoFileList = new String[] { "R.raw.01", "R.raw.02" };

    BaseAdapter adapter = new BaseAdapter() {

        public int getCount() {
            return videoFileList.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView = new ImageView(Select.this);
            Bitmap bmThumbnail;
            bmThumbnail = ThumbnailUtils.createVideoThumbnail("android.resource://" + getPackageName() + "/"
                    + videoFileList[position], Thumbnails.MINI_KIND);
            System.out.println(videoFileList[position]);
            imageView.setImageBitmap(bmThumbnail);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
            imageView.setBackgroundResource(typedArray.getResourceId(
                    R.styleable.Gallery_android_galleryItemBackground, 0));
            return imageView;
        }
    };
    gallery.setAdapter(adapter);
    gallery.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(Select.this, Play.class);
            intent.putExtra("image", videoFileList[position]);

            startActivity(intent);
            Select.this.finish();
        }

        public void onNothingClick(AdapterView<?> parent) {
        }
    });
}

3 个答案:

答案 0 :(得分:2)

在Android 5上,createVideoThumbnail()在要求资源中的视频缩略图时始终返回null。这是最终对我有用的东西:

Uri videoURI = Uri.parse("android.resource://" + getActivity().getPackageName() + "/raw/animation");
MediaMetadataRetriever retriever = new MediaMetadataRetriever();              
retriever.setDataSource(getActivity().getApplicationContext(), videoURI);
Bitmap thumb = retriever.getFrameAtTime(10, MediaMetadataRetriever.OPTION_PREVIOUS_SYNC);
videoView.setBackground(new BitmapDrawable(getResources(), thumb));

答案 1 :(得分:0)

你看过ThumbnailUtils班级的createVideoThumbnail()吗?

实际上,您的视频文件位于resource/raw目录中,因此您必须为其创建缩略图。

如果您的视频文件位于外部存储空间,那么Android Media Store本身就会为您创建。你可以通过MediaStore.Video.Thumbnails Class来获得它。

答案 2 :(得分:0)

应用程序的res/raw文件夹上的视频不受Android Media内容提供商管理,因此您无法从中获取缩略图。

或者,您可以尝试将它们保存为SD中的普通文件,然后向媒体提供商询问缩略图或直接通过ThumbnailUtils.createVideoThumbnail课程(仅限Android 2.2或更高版本)创建