查詢手機所有視頻文件以及獲取縮略圖,注意需要在真機測試才能看到效果
/** * 獲取本地視頻的工具類 */ public class VideoUtils { /** * 獲取視頻的縮略圖 * 先通過ThumbnailUtils來創建一個視頻的縮略圖,然后再利用ThumbnailUtils來生成指定大小的縮略圖。 * 如果想要的縮略圖的寬和高都小於MICRO_KIND,則類型要使用MICRO_KIND作為kind的值,這樣會節省內存。 * @param videoPath 視頻的路徑 * @param width 指定輸出視頻縮略圖的寬度 * @param height 指定輸出視頻縮略圖的高度度 * @param kind 參照MediaStore.Images(Video).Thumbnails類中的常量MINI_KIND和MICRO_KIND。 * 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96 * @return 指定大小的視頻縮略圖 */ public static Bitmap getVideoThumbnail(String videoPath, int width, int height,int kind) { Bitmap bitmap = null; // 獲取視頻的縮略圖 bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind); if(bitmap!= null){ bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); } return bitmap; } /** * 獲取指定路徑中的視頻文件 * @param list 裝掃描出來的視頻文件實體類 * @param file 指定的文件 */ public static void getVideoFile(final List<VideoInfo> list, File file) {// 獲得視頻文件 file.listFiles(new FileFilter() { @Override public boolean accept(File file) { // sdCard找到視頻名稱 String name = file.getName(); int i = name.indexOf('.'); if (i != -1) { name = name.substring(i);//獲取文件后綴名 if (name.equalsIgnoreCase(".mp4") //忽略大小寫 || name.equalsIgnoreCase(".3gp") || name.equalsIgnoreCase(".wmv") || name.equalsIgnoreCase(".ts") || name.equalsIgnoreCase(".rmvb") || name.equalsIgnoreCase(".mov") || name.equalsIgnoreCase(".m4v") || name.equalsIgnoreCase(".avi") || name.equalsIgnoreCase(".m3u8") || name.equalsIgnoreCase(".3gpp") || name.equalsIgnoreCase(".3gpp2") || name.equalsIgnoreCase(".mkv") || name.equalsIgnoreCase(".flv") || name.equalsIgnoreCase(".divx") || name.equalsIgnoreCase(".f4v") || name.equalsIgnoreCase(".rm") || name.equalsIgnoreCase(".asf") || name.equalsIgnoreCase(".ram") || name.equalsIgnoreCase(".mpg") || name.equalsIgnoreCase(".v8") || name.equalsIgnoreCase(".swf") || name.equalsIgnoreCase(".m2v") || name.equalsIgnoreCase(".asx") || name.equalsIgnoreCase(".ra") || name.equalsIgnoreCase(".ndivx") || name.equalsIgnoreCase(".xvid")) { VideoInfo vi = new VideoInfo(); vi.displayName = file.getName();//文件名 vi.filePath = file.getAbsolutePath();//文件路徑 list.add(vi); LogUtils.i("tag","文件名:"+vi.displayName+",路徑:"+vi.filePath); return true; } } else if (file.isDirectory()) { getVideoFile(list, file); } return false; } }); } }
當你運行時,你會發現有些視頻得不到縮略圖。其實強大的圖片加載框架Glide就可以做到獲取本地視頻的縮略圖(不能獲取網絡視頻文件)
String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; Glide .with( context ) .load( Uri.fromFile( new File( filePath ) ) ) .into( imageViewGifAsBitmap );
