Android獲取本機各種型別檔案列表(音樂、影片、圖片、文件等)
介紹
本篇介紹Android獲取本機各種型別檔案的方法,已經封裝成工具類,末尾有原始碼下載地址。
提示
獲取音樂、影片、圖片、文件等檔案是需要有讀取SD卡的許可權的,如果是6.0以下的系統,則直接在清單檔案中宣告SD卡讀取許可權即可;如果是6.0或以上,則需要動態申請許可權。
FileManager的使用
FileManager是封裝好的用於獲取本機各類檔案的工具類,使用方式如:FileManager.getInstance(Context context).getMusics(),使用的是單例模式建立:
private static FileManager mInstance;private static Context mContext;public static ContentResolver mContentResolver;private static Object mLock = new Object();public static FileManager getInstance(Context context){ if (mInstance == null){ synchronized (mLock){ if (mInstance == null){ mInstance = new FileManager(); mContext = context; mContentResolver = context.getContentResolver(); } } } return mInstance; }
獲取音樂列表
/** * 獲取本機音樂列表 * @return */private static ListgetMusics() { ArrayList musics = new ArrayList(); Cursor c = null; try { c = mContentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); while (c.moveToNext()) { String path = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));// 路徑 if (FileUtils.isExists(path)) { continue; } String name = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); // 歌曲名 String album = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); // 專輯 String artist = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); // 作者 long size = c.getLong(c.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));// 大小 int duration = c.getInt(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));// 時長 int time = c.getInt(c.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));// 歌曲的id // int albumId = c.getInt(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)); Music music = new Music(name, path, album, artist, size, duration); musics.add(music); } } catch (Exception e) { e.printStackTrace(); } finally { if (c != null) { c.close(); } } return musics; }
FileUtils中判斷檔案是否存在的方法isExists(String path),程式碼為:
/** * 判斷檔案是否存在 * @param path 檔案的路徑 * @return */public static boolean isExists(String path) { File file = new File(path); return file.exists(); }
音樂的bean類Music程式碼為:
public class Music implements Comparable{ /**歌曲名*/ private String name; /**路徑*/ private String path; /**所屬專輯*/ private String album; /**藝術家(作者)*/ private String artist; /**檔案大小*/ private long size; /**時長*/ private int duration; /**歌曲名的拼音,用於字母排序*/ private String pinyin; public Music(String name, String path, String album, String artist, long size, int duration) { this.name = name; this.path = path; this.album = album; this.artist = artist; this.size = size; this.duration = duration; pinyin = PinyinUtils.getPinyin(name); } ... //此處省略setter和getter方法}
PinyinUtils根據名字獲取拼音,主要是用於音樂列表A-Z的排序,需要依賴pinyin4j.jar,獲取拼音的方法getPinyin(String name)程式碼為:
public static String getPinyin(String str) { // 設定拼音結果的格式 HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 設定為大寫形式 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不用加入聲調 StringBuilder sb = new StringBuilder(); char[] charArray = str.toCharArray(); for (int i = 0; i獲取影片列表
/** * 獲取本機影片列表 * @return */private static List其中,影片的bean類Video程式碼為:
public class Video { private int id = 0; private String path = null; private String name = null; private String resolution = null;// 解析度 private long size = 0; private long date = 0; private long duration = 0; public Video(int id, String path, String name, String resolution, long size, long date, long duration) { this.id = id; this.path = path; this.name = name; this.resolution = resolution; this.size = size; this.date = date; this.duration = duration; } ... //此處省略setter和getter方法}透過本地影片id獲取影片縮圖
// 獲取影片縮圖private static Bitmap getVideoThumbnail(int id) { Bitmap bitmap = null; BitmapFactory.Options options = new BitmapFactory.Options(); options.inDither = false; options.inPreferredConfig = Bitmap.Config.ARGB_8888; bitmap = MediaStore.Video.Thumbnails.getThumbnail(mContentResolver, id, MediaStore.Images.Thumbnails.MICRO_KIND, options); return bitmap; }上面獲取影片列表的方法中,Video物件中有一個屬性是id,透過傳入這個id可以獲取到影片縮圖的Bitmap物件。
獲取本機所有圖片資料夾
/** * 得到圖片資料夾集合 */private static ListgetImageFolders() { List folders = new ArrayList (); // 掃描圖片 Cursor c = null; try { c = mContentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.Media.MIME_TYPE + "= ? or " + MediaStore.Images.Media.MIME_TYPE + "= ?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED); List mDirs = new ArrayList ();//用於儲存已經新增過的資料夾目錄 while (c.moveToNext()) { String path = c.getString(c.getColumnIndex(MediaStore.Images.Media.DATA));// 路徑 File parentFile = new File(path).getParentFile(); if (parentFile == null) continue; String dir = parentFile.getAbsolutePath(); if (mDirs.contains(dir))//如果已經新增過 continue; mDirs.add(dir);//新增到儲存目錄的集合中 ImgFolderBean folderBean = new ImgFolderBean(); folderBean.setDir(dir); folderBean.setFistImgPath(path); if (parentFile.list() == null) continue; int count = parentFile.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { if (filename.endsWith(".jpeg") || filename.endsWith(".jpg") || filename.endsWith(".png")) { return true; } return false; } }).length; folderBean.setCount(count); folders.add(folderBean); } } catch (Exception e) { e.printStackTrace(); } finally { if (c != null) { c.close(); } } return folders; } 其中,圖片資料夾的bean類ImgFolderBean程式碼為:
public class ImgFolderBean { /**當前資料夾的路徑*/ private String dir; /**第一張圖片的路徑,用於做資料夾的封面圖片*/ private String fistImgPath; /**資料夾名*/ private String name; /**資料夾中圖片的數量*/ private int count; public ImgFolderBean(String dir, String fistImgPath, String name, int count) { this.dir = dir; this.fistImgPath = fistImgPath; this.name = name; this.count = count; } ... //此處省略setter和getter方法}獲取圖片資料夾下的圖片路徑的集合
/** * 透過圖片資料夾的路徑獲取該目錄下的圖片 */private static ListgetImgListByDir(String dir) { ArrayList imgPaths = new ArrayList(); File directory = new File(dir); if (directory == null || !directory.exists()) { return imgPaths; } File[] files = directory.listFiles(); for (File file : files) { String path = file.getAbsolutePath(); if (FileUtils.isPicFile(path)) { imgPaths.add(path); } } return imgPaths; } 獲取本機已安裝應用列表
/** * 獲取已安裝apk的列表 */private static List
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3349/viewspace-2813782/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .net core 獲取檔案MIME型別型別
- 遞迴獲取檔案列表遞迴
- Android 從手機相簿獲取圖片 uri 路徑 從相機獲取照片Android
- 【API】隨機獲取圖片API隨機
- 純JS生成並下載各種文字檔案或圖片JS
- windows使用者資料夾位置批次修改(影片/圖片/文件/下載/音樂/桌面)Windows
- 分享下 PHP 使用 getID3 來獲取音訊、影片等媒體檔案相關資訊PHP音訊
- 利用html5 file api讀取本地檔案(如圖片、PDF等)HTMLAPI
- 各種檔案用JS轉Base64之後的data型別JS型別
- android高仿抖音、點餐介面、天氣專案、自定義view指示、爬取美女圖片等原始碼AndroidView原始碼
- 03 #### 讀取靜態檔案-圖片
- markdown插入圖片、音訊影片音訊
- UIModalPresentationStyle 各種型別的區別UI型別
- 爬取微博圖片資料存到Mysql中遇到的各種坑mysql儲存圖片爬取微博圖片MySql
- Java獲取Spring的各種物件JavaSpring物件
- mapbox獲取各種經緯度
- PG獲取檔案大小的幾種方式
- 一張圖瀏覽資料庫各種型別資料庫型別
- 一張圖解釋各種資料庫型別圖解資料庫型別
- Python3 - 獲取資料夾中的檔案列表Python
- 獲取相應副檔名的ContentType型別型別
- phpSpreadsheet 讀取圖片並另存為檔案PHP
- redis部署以及各種資料型別使用命令等詳解Redis資料型別
- 適配Android4.4~Android11,呼叫系統相機,系統相簿,系統圖片裁剪,轉換檔案(對圖片進行上傳等操作)Android
- Android 截圖的各種騷操作Android
- iOS 獲取視訊圖片iOS
- 獲取本地圖片/視訊地圖
- 手機使用python操作圖片檔案Python
- FileReader()讀取檔案、圖片上傳預覽
- js擷取影片的封面圖片JS
- 苦瓜:音樂知識圖片備份
- Android圖片快取框架GlideAndroid快取框架IDE
- C# 獲取PPT幻燈片背景型別和顏色C#型別
- Android開源音樂播放器之線上音樂列表自動載入更多Android播放器
- pdf是圖片還是文件 pdf格式是文字檔案還是影像檔案
- XButton-萬能的Button告別各種shape檔案
- 獲取各種螢幕高度寬度(工作)
- jQuery獲取本機ip地址jQuery