<强>介绍强>
本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址。
<>强提示强>
获取音乐,视频,图片,文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文件中声明SD卡读取权限即可,如果是6.0或以上,则需要动态申请权限。
<强>文件管理的使用强>
文件管理是封装好的用于获取本机各类文件的工具类,使用方式如:文件管理。getInstance(上下文语境).getMusics(),使用的是单例模式创建:
私有静态文件管理mInstance; 私有静态上下文mContext; 公共静态ContentResolver mContentResolver; 私有静态对象mLock=新对象(); 公共静态文件管理getInstance(上下文语境){ 如果(mInstance==null) { 同步(mLock) { 如果(mInstance==null) { mInstance=new文件管理(); mContext=上下文; mContentResolver=context.getContentResolver (); } } } 返回mInstance; } >之前获取音乐列表
/* * *获取本机音乐列表 * @return */私有静态ListgetMusics () { ArrayList 音乐=new ArrayList<在(); 光标c=零; 尝试{ c=mContentResolver.query (MediaStore.Audio.Media。EXTERNAL_CONTENT_URI,空,空,空, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 而(c.moveToNext ()) { 字符串路径=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.DATA));//路径 如果(FileUtils.isExists(路径)){ 继续; } 字符串名称=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.DISPLAY_NAME));//歌曲名 字符串专辑=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.ALBUM));//专辑 字符串艺术家=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.ARTIST));//作者 长尺寸=c.getLong (c.getColumnIndexOrThrow (MediaStore.Audio.Media.SIZE));//大小 int时间=c.getInt (c.getColumnIndexOrThrow (MediaStore.Audio.Media.DURATION));//时长 int时间=c.getInt (c.getColumnIndexOrThrow (MediaStore.Audio.Media._ID));//歌曲的id//int albumId=c.getInt (c.getColumnIndexOrThrow (MediaStore.Audio.Media.ALBUM_ID)); 音乐音乐=new(名称、路径、专辑名、艺人、大小、持续时间); musics.add(音乐); } }捕捉(异常e) { e.printStackTrace (); 最后}{ 如果(c !=null) { c.close (); } } 返回音乐; } >之前 FileUtils中判断文件是否存在的方法isExists (String路径),代码为:
/* * *判断文件是否存在 * @param路径文件的路径 * @return */公共静态布尔isExists (String路径){ 文件文件=新文件(路径); 返回file.exists (); } >之前音乐的bean类音乐代码为:
公共类音乐实现Comparable{/* *歌曲名*/私人字符串名称;/* *路径*/私人字符串路径;/* *所属专辑*/私人字符串专辑;/* *艺术家(作者)*/私人字符串艺术家;/* *文件大小*/私人长尺寸;/* *时长*/私人int持续时间;/* *歌曲名的拼音,用于字母排序*/私人字符串拼音; 公共音乐专辑字符串名称,路径的字符串,字符串,字符串艺术家,长尺寸,int持续时间){ this.name=名称; 这一点。路径=路径; 这一点。相册=专辑; 这一点。艺术家=艺术家; 这一点。大?大小; 这一点。时间=时间; 拼音=PinyinUtils.getPinyin(名称); } …//此处省略setter和getter方法 } >之前 PinyinUtils根据名字获取拼音,主要是用于音乐列表a - z的排序,需要依赖pinyin4j。jar,获取拼音的方法getPinyin(字符串名称)代码为:
公共静态字符串getPinyin (String str) {//设置拼音结果的格式 HanyuPinyinOutputFormat格式=new HanyuPinyinOutputFormat (); format.setCaseType (HanyuPinyinCaseType.UPPERCASE);//设置为大写形式 format.setToneType (HanyuPinyinToneType.WITHOUT_TONE);//不用加入声调 StringBuilder某人=new StringBuilder (); char [] charArray=str.toCharArray (); for (int i=0;我& lt;charArray.length;我+ +){ 字符c=charArray[我]; 如果(Character.isWhitespace (c)){//如果是空格则跳过 继续; } 如果(isHanZi (c)){//如果是汉字 字符串s=" "; 尝试{//toHanyuPinyinStringArray返回一个字符串数组是因为该汉字可能是多音字,此处只取第一个结果 s=PinyinHelper。toHanyuPinyinStringArray (c,格式)[0]; sb.append(年代); }捕捉(BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace (); sb.append(年代); } 其他}{//不是汉字 如果(i==0) { 如果(发明(c)){//第一个属于字母,则返回该字母 返回String.valueOf (c) .toUpperCase (Locale.ENGLISH); } 返回“#”;//不是的话返回#号 } } } 返回sb.toString (); }Android获取本机各种类型文件的方法