列出SD卡所有视频文件

方法一、递归列出SD卡路径下的所有文件,若该文件是视频文件,则将其加入到结果列表中。最终,结果列表中即保存所有的视频文件。部分代码如下:

List<File> mFiles = new ArrayList<File>();
private void getAllVideoFiles(File root) {
		File[] files = root.listFiles();
		if (files != null) {
			for (File file : files) {
				if (file.isDirectory()) {
					getAllVideoFiles(file);
				} else {
					if (isVideo(file)) {
						mFiles.add(file);
					}
				}
			}
		}
	}
	
	private boolean isVideo(File file) {
		String name = file.getName();
		int pos = name.lastIndexOf(".");
		if (pos != -1) {
			String suffix = name.substring(pos+1).toLowerCase();
			if (suffix.equals("mp4") ||
				suffix.equals("3gp") ||
				suffix.equals("avi")) {
				return true;
			}
		}
		return false;
	}
由于该方法要遍历所有文件,所有比较低效。


方法二、使用操作系统的ContentProvider进行查询,代码如下:

public class MainActivity extends Activity {
	private ListView mListView;
	private List<String> mFileNames;
	private List<String> mFilePaths;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		if (!LibsChecker.checkVitamioLibs(this)) {
			return;
		}
		setContentView(R.layout.activity_main);
		this.mListView = (ListView) findViewById(R.id.lv);
		getAllVideoFiles();
		this.mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.mFileNames));
		this.mListView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Intent intent = new Intent(MainActivity.this, VideoActivity.class);
				intent.putExtra("path", mFilePaths.get(position));
				startActivity(intent);
			}
			
		});
	}
	
	private void getAllVideoFiles() {
		this.mFileNames = new ArrayList<String>();
		this.mFilePaths = new ArrayList<String>();
		Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);
		while (cursor.moveToNext()) {
			// 文件名称
			String name = cursor.getString(cursor.getColumnIndex(Media.DISPLAY_NAME));
			this.mFileNames.add(name);
			
			// 文件路径
			byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA));
			this.mFilePaths.add(new String(data, 0, data.length-1));
		}
	}
	
}
这种方法即简单又高效。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值