使用MediaStore获取SD卡上所有的文本文件

在开发《轻松编辑》5.1版的快速打开文本文件时,遇到了如何快速获取SD卡上所有文本文件的问题。查了API,发现MediaStore可以使用。MediaStore可以获取音乐、视频和图片等,在API level 大于11后还可以获取其它文件,比如文本,或者doc,pdf。

相关代码如下:

@TargetApi(11)
private void refreshList(){
	String[] columns = new String[] {
		MediaStore.Files.FileColumns.TITLE,
		MediaStore.Files.FileColumns.DATA
	};
	Uri uri = MediaStore.Files.getContentUri("external");
	String selection = "(" + MediaStore.Files.FileColumns.MIME_TYPE + "=='text/plain')";
	Cursor c = getContentResolver().query(uri, columns, selection, null, MediaStore.Files.FileColumns.SIZE + " DESC");
	if (c == null) {
		return;
	}
 
	if (c.moveToFirst()) {
		int dataIndex = c.getColumnIndex(MediaStore.Files.FileColumns.DATA);
		int titleIndex = c.getColumnIndex(MediaStore.Files.FileColumns.TITLE);
		do {
 
			c.getString(titleIndex); // 获取文件名,不包含扩展名
			c.getString(dataIndex);  // 获取文件实际路径
 
		} while (c.moveToNext()); // 循环获取文件
	}
}

注意:MediaStore.Files这个类要到API Level 11才能使用,这就是《轻松编辑》在Android 3.0版本以下不能启用快速打开文本的原因。其实这个可以解决的,比如在android 3.0以下用手动来获取,可如果SD卡上文件很多的话,这个时间就很漫长了,所以还是不加好。