因為項目須要一個類似于文件管理器的功能,于是找了找網上的項目,沒有太適合的,于是自己寫一個,順便總結分享一下
一 ,視頻 / 音頻 / 圖片 / 文檔
項目要求分成這四個類別.那么首先要所得就是過濾獲得文件列表,其次展示出來.
// 獲取文檔列表
String[] columns = new String[] { FileColumns._ID, FileColumns.DATA, FileColumns.SIZE, FileColumns.DATE_MODIFIED};
Cursor cursor = null;
Uri uri = Files.getContentUri("external");
cursor=getContentResolver().query(uri,columns,buildDocSelection(),null,(FileColumns.TITLE + " asc"));
// 根據以獲取的 cursor ,轉換成file對象,裝入到列表中.
if (cursor.moveToFirst()) {
for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
String filePath = cursor.getString(1);
File file = new File(filePath);
// .... 進行自己的代碼邏輯
}
}
獲取文件列表時,過濾條件方法
private String buildDocSelection() {
StringBuilder selection = new StringBuilder();
Iterator<String> iter = Util.sDocMimeTypesSet.iterator();
while (iter.hasNext()) {
selection.append("(" + FileColumns.MIME_TYPE + "=='" + iter.next() + "') OR ");
}
return selection.substring(0, selection.lastIndexOf(")") + 1);
}
public static HashSet<String> sDocMimeTypesSet = new HashSet<String>() {
{
add("text/plain");
add("application/pdf");
add("application/msword");
add("application/vnd.ms-excel");
}
};
獲取音頻/圖片/視頻列表
與過濾文檔不同,這三種不需搖過濾條件,其他都一樣
// 圖片
Uri uri = MediaStore.Images.Media.getContentUri("external");
cursor = getContentResolver().query(uri, columns, null, null, (FileColumns.TITLE + " asc"));
// 視頻
Uri uri = MediaStore.Video.Media.getContentUri("external");
cursor = getContentResolver().query(uri, columns, null, null, (FileColumns.TITLE + " asc"));
// 音頻
Uri uri = MediaStore.Audio.Media.getContentUri("external");
cursor = getContentResolver().query(uri, columns, null, null, (FileColumns.TITLE + " asc"));
以上就是全部內容,如果有問題歡迎留言指正~