注意部分:
通过 Intent.ACTION_MEDIA_MOUNTED 进行全扫描
通过 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 扫描某个文件
上述方法是不支持对文件夹的 即:Uri data 必须是 文件的Uri 如果是文件夹的 其不会起作用的 切记!
方法二 直接查找
这种方法是最原始的方法,通过获取文件目录递归来查询文件
正面是主要实现:/*** 获取指定位置的指定类型的文件
*
*@parampath
*
文件夹路径
*@paramtype
*
文件类型(如“*.jpg;*.png;*.gif”)
*getFileList(String path, String type,finalOnFileListCallback onFileListCallback) {new AsyncTask() {
ArrayList list = new ArrayList();
@Overrideprotected voidonPostExecute(String result) {
onFileListCallback.SearchFileListInfo(list);
}
@OverrideprotectedString doInBackground(String… params) {//TODO Auto-generated method stub
String path= params[1].substring(params[1]
.lastIndexOf(“.”)+ 1);
File file= new File(params[0]);
scanSDCard(file,path,list);return null;
}
}.execute(path, type, “”);
}/*** 扫描完成后的回调,获取文件列表必须实现
*
*@authorcola
*OnFileListCallback {/*** 返回查询的文件列表
*@paramlist 文件列表SearchFileListInfo(Listlist);
}scanSDCard(File file, String ext, ArrayListlist) {if(file.isDirectory()) {
File[] files=file.listFiles();if (files != null) {for (int i = 0; i < files.length; i++) {
File tmp=files[i];if(tmp.isFile()) {
String fileName=tmp.getName();
String filePath=tmp.getName();if (fileName.indexOf(“.”) >= 0) {
fileName=fileName.substring(fileName
.lastIndexOf(“.”)+ 1);if (ext != null &&ext.equalsIgnoreCase(fileName)) {
AspLog.i(TAG, filePath);
FileInfo info= newFileInfo();
info.fileName=filePath;
info.filePath=tmp.getAbsolutePath();
list.add(info);
}
}
}elsescanSDCard(tmp, ext, list);
}
}
}else{if(file.isFile()) {
String fileName=file.getName();
String filePath=file.getName();if (fileName.indexOf(“.”) >= 0) {
fileName=fileName
.substring(fileName.lastIndexOf(“.”)+ 1);if (ext != null &&ext.equalsIgnoreCase(fileName)) {
AspLog.i(TAG, filePath);
FileInfo info= newFileInfo();
info.fileName=filePath;
info.filePath=file.getAbsolutePath();
list.add(info);
}
}
}
}
}