您的位置:首页 > 移动开发 > Android开发

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

2017-02-08 22:14 381 查看
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卡的权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android