安卓获取本地视频(指定文件下),并用listview显示出来

您所在的位置:网站首页 android遍历本地文件 安卓获取本地视频(指定文件下),并用listview显示出来

安卓获取本地视频(指定文件下),并用listview显示出来

2024-07-14 11:39| 来源: 网络整理| 查看: 265

参考 android/安卓获取视频文件缩略图及时长 Android ListView 列表控件 在Android中如何获取视频的第一帧图片并显示在一个ImageView中 List集合循环添加对象会重复的原因及解决办法 思路

先使用listview显示一些简单的内容,只是这些内容是自己手动输入的。

然后获取视频的一些信息,替换掉自己手动输入的内容。

显示效果

核心代码 //获取指定文件夹下所有视频文件 public static List getVideo(Context context, String fileAbsolutePath) { File file = new File(fileAbsolutePath); if (!file.exists()) { Toast.makeText(context, "文件夹不存在", Toast.LENGTH_SHORT).show(); return null; } File[] subFile = file.listFiles(); for (int iFileLength = 0; iFileLength < subFile.length; iFileLength++) {       VideoInfo info = new VideoInfo(); //必须放在for循环里面,不然会显示几个一样的 // 判断是否为文件夹 if (!subFile[iFileLength].isDirectory()) { String filename = subFile[iFileLength].getName(); System.out.println("----name = " + filename); Log.d(TAG, filename); Log.d(TAG, String.valueOf(iFileLength)); // 判断是否为MP4结尾 if (filename.trim().toLowerCase().endsWith(".mp4") || filename.trim().toLowerCase().endsWith(".3gp") || filename.trim().toLowerCase().endsWith(".avi") || filename.trim().toLowerCase().endsWith(".flv")) { // 设置文件路径 info.setPath(subFile[iFileLength].getPath()); //Log.d(TAG, subFile[iFileLength].getPath()); ///storage/emulated/0/Android/data/com.example.video_list_demo1/cache/VID_20211229_074135.mp4 // 设置文件夹名称 info.setTitle(subFile[iFileLength].getName()); // Log.d(TAG, subFile[iFileLength].getName()); //VID_20211229_074135.mp4 //设置文件时长 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(subFile[iFileLength].getPath()); //得到的数除1000得到秒,再把秒分为时分秒 int time = Integer.parseInt(retriever.extractMetadata (MediaMetadataRetriever.METADATA_KEY_DURATION)) / 1000; Integer hour = time / 60 / 60; Integer minutes = time / 60 % 60; Integer remainingSeconds = time % 60; String duration = hour + "时" + minutes + "分" + remainingSeconds + "秒"; info.setDuration(duration); Log.d(TAG, duration); //0时0分22秒 //根据路径获得视频缩略图 Bitmap bitmap = retriever.getFrameAtTime(); info.setId(bitmap); list.add( info); Log.d(TAG, "onCreate: " + iFileLength+ "..."+list.get(iFileLength).getTitle()); //onCreate: 2...Health20211229083327complete.mp4 } } } return list; }

全部代码

list_item.xml activity_main.xml  VideoInfo.java package com.example.video_list_demo1; import android.graphics.Bitmap; public class VideoInfo { /** * */ private static final long serialVersionUID = -7920222595800367956L; private Bitmap id; private String title; private String album; private String artist; private String displayName; private String mimeType; private String path; private long size; private String duration; /** * */ public VideoInfo() { super(); } private boolean isSelect; public boolean isSelect() { return isSelect; } public void setSelect(boolean isSelect) { this.isSelect = isSelect; } public VideoInfo (String aName, String aDesc, Bitmap aIcon) { this.title = aName; this.duration = aDesc; this.id = aIcon; } public VideoInfo(Bitmap id, String title, String album, String artist, String displayName, String mimeType, String path, long size, String duration) { super(); this.id = id; this.title = title; this.album = album; this.artist = artist; this.displayName = displayName; this.mimeType = mimeType; this.path = path; this.size = size; this.duration = duration; } public Bitmap getId() { return id; } public void setId(Bitmap id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAlbum() { return album; } public void setAlbum(String album) { this.album = album; } public String getArtist() { return artist; } public void setArtist(String artist) { this.artist = artist; } public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } public String getMimeType() { return mimeType; } public void setMimeType(String mimeType) { this.mimeType = mimeType; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public long getSize() { return size; } public void setSize(long size) { this.size = size; } public String getDuration() { return duration; } public void setDuration(String duration) { this.duration = duration; } } YetAdapter.java package com.example.video_list_demo1; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.MediaMetadataRetriever; import android.os.Bundle; import android.os.FileUtils; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { private static String TAG = "xunyan"; private static ArrayList list = new ArrayList(); //获取指定文件夹下所有视频文件 public static List getVideo(Context context, String fileAbsolutePath) { File file = new File(fileAbsolutePath); if (!file.exists()) { Toast.makeText(context, "文件夹不存在", Toast.LENGTH_SHORT).show(); return null; } File[] subFile = file.listFiles(); for (int iFileLength = 0; iFileLength < subFile.length; iFileLength++) { VideoInfo info = new VideoInfo(); //必须放在for循环里面,不然会显示几个一样的 // 判断是否为文件夹 if (!subFile[iFileLength].isDirectory()) { String filename = subFile[iFileLength].getName(); System.out.println("----name = " + filename); Log.d(TAG, filename); Log.d(TAG, String.valueOf(iFileLength)); // 判断是否为MP4结尾 if (filename.trim().toLowerCase().endsWith(".mp4") || filename.trim().toLowerCase().endsWith(".3gp") || filename.trim().toLowerCase().endsWith(".avi") || filename.trim().toLowerCase().endsWith(".flv")) { // 设置文件路径 info.setPath(subFile[iFileLength].getPath()); //Log.d(TAG, subFile[iFileLength].getPath()); ///storage/emulated/0/Android/data/com.example.video_list_demo1/cache/VID_20211229_074135.mp4 // 设置文件夹名称 info.setTitle(subFile[iFileLength].getName()); // Log.d(TAG, subFile[iFileLength].getName()); //VID_20211229_074135.mp4 //设置文件时长 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(subFile[iFileLength].getPath()); //得到的数除1000得到秒,再把秒分为时分秒 int time = Integer.parseInt(retriever.extractMetadata (MediaMetadataRetriever.METADATA_KEY_DURATION)) / 1000; Integer hour = time / 60 / 60; Integer minutes = time / 60 % 60; Integer remainingSeconds = time % 60; String duration = hour + "时" + minutes + "分" + remainingSeconds + "秒"; info.setDuration(duration); Log.d(TAG, duration); //0时0分22秒 //根据路径获得视频缩略图 Bitmap bitmap = retriever.getFrameAtTime(); info.setId(bitmap); list.add( info); Log.d(TAG, "onCreate: " + iFileLength+ "..."+list.get(iFileLength).getTitle()); //onCreate: 2...Health20211229083327complete.mp4 } } } return list; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //清空list,防止反复添加 list.clear(); //获取外部文件所在地址:/storage/emulated/0/Android/data/com.example.video_list_demo1/cache String video_path = getExternalCacheDir().getAbsolutePath(); //获取所有视频及其信息,保存到list中 getVideo(this, video_path); /* //单例测试 info = new VideoInfo(); info.setTitle("111"); info.setDuration("222"); info.setId(bitmap); list.add(info);*/ //创建一个 YetAdapter ListView listView = (ListView) findViewById(R.id.listview); YetAdapter yetAdapter = new YetAdapter((ArrayList) list, getApplicationContext()); listView.setAdapter(yetAdapter); listView.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "你点击了第" + position + "项", Toast.LENGTH_SHORT).show(); //点击跳转到播放界面 // Intent intent } }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3