【问题标题】:How can I get video thumbnails from R.raw folder?如何从 R.raw 文件夹中获取视频缩略图?
【发布时间】:2013-02-02 15:06:58
【问题描述】:

下面的代码无法获取位于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) {
        }
    });
}

【问题讨论】:

    标签: android video thumbnails


    【解决方案1】:

    你看过createVideoThumbnail()ThumbnailUtils类吗?

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

    如果您的视频文件位于 外部存储 中,那么 Android 媒体商店会自行为您创建。您可以通过MediaStore.Video.Thumbnails Class 获得它。

    【讨论】:

    • 你能看一下我的代码吗,我之前检查过 creatVideoThumbnail ,但仍然不知道哪里错了。
    • 所以你的意思是当用户下载应用程序时将所有视频直接放在sdcard中?我不知道哪种方式更好,所以我最初将视频放在 R.raw 文件夹中。
    • 让你的文件路径像 "android.resource://&lt;package_name&gt;/raw/filename" 所以在你的情况下它应该像 "android.resource://"+getPackageName()+"/raw/01"
    【解决方案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));
    

    【讨论】:

      【解决方案3】:

      您的应用程序的res/raw 文件夹中的视频不由 Android Media Content Provider 管理,因此您无法从中获取其缩略图。

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

      【讨论】:

        猜你喜欢
        • 2015-11-09
        • 1970-01-01
        • 2011-10-19
        • 2013-06-05
        • 2020-05-16
        • 2011-05-12
        • 2011-10-23
        • 2020-06-26
        • 2020-11-25
        相关资源
        最近更新 更多