首页 > 系统 > Android > 正文

Android 扫描SD卡中的所有视频文件

2019-11-09 15:22:01
字体:
来源:转载
供稿:网友

Android应该是已经把所有的视频文件音频都在开机时,扫描完毕然后存在本地SQLite数据库了,因此,我们“扫描”的最简单方法是读取这个已经存储好的数据库。但是这样做,在程序开启过程中,用户添加或删除了音频视频文件,此时需要重新mount相关设备,才能保证程序的正确性。

另外一种方法是判断文件后缀,不如以上方法来的简单。

下面简单介绍如何使用第一种方法读取SD卡中的所有视频文件 布局文件:自动生成的即可,文件的相关信息打印在log中 需要加上读取SD卡的权限 mainactivity:

public class MainActivity extends Activity { @Override PRotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("chj", "onCreate"); // MediaStore.Video.Thumbnails.DATA:视频缩略图的文件路径 // MediaStore.Video.Media.DATA:视频文件路径; // MediaStore.Video.Media.DISPLAY_NAME : 视频文件名,如 testVideo.mp4 // MediaStore.Video.Media.TITLE: 视频标题 : testVideo // MediaStore.Video.Media.DATE_ADDED // MediaStore.Video.Media.DATE_MODIFIED // MediaStore.Video.Media.HEIGHT // MediaStore.Video.Media.MIME_TYPE // MediaStore.Video.Media.SIZE // MediaStore.Video.VideoColumns.ALBUM // MediaStore.Video.VideoColumns.ARTIST // MediaStore.Video.VideoColumns.BOOKMARK // MediaStore.Video.VideoColumns.BUCKET_DISPLAY_NAME // MediaStore.Video.VideoColumns.BUCKET_ID // MediaStore.Video.VideoColumns.CATEGORY // MediaStore.Video.VideoColumns.DATE_TAKEN // MediaStore.Video.VideoColumns.DESCRipTION // MediaStore.Video.VideoColumns.DURATION // MediaStore.Video.VideoColumns.LANGUAGE // String[] projection = { MediaStore.Video.VideoColumns.DATA, // MediaStore.Video.Media.DISPLAY_NAME, // MediaStore.Video.Media.TITLE, // MediaStore.Video.Media.DATE_ADDED, MediaStore.Video.Media.SIZE, // MediaStore.Video.VideoColumns.ALBUM, // MediaStore.Video.VideoColumns.ARTIST, // MediaStore.Video.VideoColumns.BOOKMARK, // MediaStore.Video.VideoColumns.DURATION, }; Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; // Cursor c = this.getContentResolver().query(uri, projection, null, // null, // null); Cursor c = this.getContentResolver().query(uri, null, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER); int vidsCount = 0; if (c != null) { vidsCount = c.getCount(); while (c.moveToNext()) { String[] s = c.getColumnNames(); for (int i = 0; i < s.length; i++) { Log.e("chj", " " + s[i] + " =====" + c.getString(i)); } Log.e("VIDEO", c.getString(0)); } c.close(); } }} Cursor c = this.getContentResolver().query(uri, null, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);

以上代码是核心,如果把MediaStore.Video.Media.DEFAULT_SORT_ORDER改成MediaStore.Audio.Media.DEFAULT_SORT_ORDER,那么读取的就是所有音频文件了。

同时以上代码有诸多注释的地方,注释的地方,其实是文件信息存储在SQLite中的对应列名 Cursor c = this.getContentResolver().query(uri, projection, null, null, null); 使用以上的查询语句,则可以查询想要的列。 第一种查询相当于: select * from tablexx 而第二种查询则是 select name,age, from tablexx

结合前一篇博客,现在就可以写出完整的播放sd卡视频的程序了。

博文中的代码: http://download.csdn.net/detail/u011109881/9750273 注:上传的资源中scan的代码少了读取SD卡的权限


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表