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

2025-08-26 19:02:56 世界杯外围赛

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卡的权限