列出SD卡所有视频文件

来源:互联网 发布:c语言的逗号表达式 编辑:程序博客网 时间:2024/06/12 00:55

方法一、递归列出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;@Overrideprotected 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() {@Overridepublic 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));}}}
这种方法即简单又高效。


0 0
原创粉丝点击