IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android获取本机各种类型文件列表(音乐,腾讯T2大牛手把手教你 -> 正文阅读

[移动开发]Android获取本机各种类型文件列表(音乐,腾讯T2大牛手把手教你

*/
public List getVideos() {

List<Video> videos = new ArrayList<Video>();

Cursor c = null;
try {
    // String[] mediaColumns = { "_id", "_data", "_display_name",
    // "_size", "date_modified", "duration", "resolution" };
    c = mContentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);
    while (c.moveToNext()) {
        String path = c.getString(c.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));// 路径
        if (!FileUtils.isExists(path)) {
            continue;
        }

        int id = c.getInt(c.getColumnIndexOrThrow(MediaStore.Video.Media._ID));// 视频的id
        String name = c.getString(c.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME)); // 视频名称
        String resolution = c.getString(c.getColumnIndexOrThrow(MediaStore.Video.Media.RESOLUTION)); //分辨率
        long size = c.getLong(c.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));// 大小
        long duration = c.getLong(c.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));// 时长
        long date = c.getLong(c.getColumnIndexOrThrow(MediaStore.Video.Media.DATE_MODIFIED));//修改时间

        Video video = new Video(id, path, name, resolution, size, date, duration);
        videos.add(video);
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (c != null) {
        c.close();
    }
}
return videos;

}


其中,视频的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获取视频缩略图

// 获取视频缩略图
public 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对象。

### 获取本机所有图片文件夹

/**

  • 得到图片文件夹集合
    */
    public List getImageFolders() {
    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方法

}


### 获取图片文件夹下的图片路径的集合

/**

  • 通过图片文件夹的路径获取该目录下的图片
    */
    public List getImgListByDir(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的列表
    */
    public List getAppInfos() {

    ArrayList appInfos = new ArrayList();
    //获取到包的管理者
    PackageManager packageManager = mContext.getPackageManager();
    //获得所有的安装包
    List installedPackages = packageManager.getInstalledPackages(0);

    //遍历每个安装包,获取对应的信息
    for (PackageInfo packageInfo : installedPackages) {

     AppInfo appInfo = new AppInfo();
    
     appInfo.setApplicationInfo(packageInfo.applicationInfo);
     appInfo.setVersionCode(packageInfo.versionCode);
    
     //得到icon
     Drawable drawable = packageInfo.applicationInfo.loadIcon(packageManager);
     appInfo.setIcon(drawable);
    
     //得到程序的名字
     String apkName = packageInfo.applicationInfo.loadLabel(packageManager).toString();
     appInfo.setApkName(apkName);
    
     //得到程序的包名
     String packageName = packageInfo.packageName;
     appInfo.setApkPackageName(packageName);
    
     //得到程序的资源文件夹
     String sourceDir = packageInfo.applicationInfo.sourceDir;
     File file = new File(sourceDir);
     //得到apk的大小
     long size = file.length();
     appInfo.setApkSize(size);
    
     System.out.println("---------------------------");
     System.out.println("程序的名字:" + apkName);
     System.out.println("程序的包名:" + packageName);
     System.out.println("程序的大小:" + size);
    
     //获取到安装应用程序的标记
     int flags = packageInfo.applicationInfo.flags;
    
     if ((flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
         //表示系统app
         appInfo.setIsUserApp(false);
     } else {
         //表示用户app
         appInfo.setIsUserApp(true);
     }
    
     if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
         //表示在sd卡
         appInfo.setIsRom(false);
     } else {
         //表示内存
         appInfo.setIsRom(true);
     }
    
     appInfos.add(appInfo);
    

    }
    return appInfos;
    }


其中,安装包信息的bean类AppInfo代码为:

public class AppInfo {
private ApplicationInfo applicationInfo;
private int versionCode = 0;
/**
* 图片的icon
*/
private Drawable icon;

/**
 * 程序的名字
 */
private String apkName;

/**
 * 程序大小
 */
private long apkSize;

/**
 * 表示到底是用户app还是系统app
 * 如果表示为true 就是用户app
 * 如果是false表示系统app
 */
private boolean isUserApp;

/**
 * 放置的位置
 */
private boolean isRom;

/**
 * 包名
 */
private String apkPackageName;

... //此处省略setter和getter方法


### 获取文档、压缩包、apk安装包等

/**

  • 通过文件类型得到相应文件的集合
    **/
    public List getFilesByType(int fileType) {
    List files = new ArrayList();
    // 扫描files文件库
    Cursor c = null;
    try {
    c = mContentResolver.query(MediaStore.Files.getContentUri(“external”), new String[]{"_id", “_data”, “_size”}, null, null, null);
    int dataindex = c.getColumnIndex(MediaStore.Files.FileColumns.DATA);
    int sizeindex = c.getColumnIndex(MediaStore.Files.FileColumns.SIZE);

     while (c.moveToNext()) {
         String path = c.getString(dataindex);
    
         if (FileUtils.getFileType(path) == fileType) {
             if (!FileUtils.isExists(path)) {
                 continue;
             }
             long size = c.getLong(sizeindex);
             FileBean fileBean = new FileBean(path, FileUtils.getFileIconByPath(path));
             files.add(fileBean);
         }
     }
    

    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (c != null) {
    c.close();
    }
    }
    return files;
    }


传入的fileType文件类型是在FileUtils定义的文件类型声明:

/*文档类型/
public static final int TYPE_DOC = 0;
/*apk类型/
public static final int TYPE_APK = 1;
/*压缩包类型/
public static final int TYPE_ZIP = 2;


其中,FileUtils根据文件路径获取文件类型的方法getFileType(String path)为:

public static int getFileType(String path) {
path = path.toLowerCase();
if (path.endsWith(".doc") || path.endsWith(".docx") || path.endsWith(".xls") || path.endsWith(".xlsx")
|| path.endsWith(".ppt") || path.endsWith(".pptx")) {
return TYPE_DOC;
}else if (path.endsWith(".apk")) {
return TYPE_APK;
}else if (path.endsWith(".zip") || path.endsWith(".rar") || path.endsWith(".tar") || path.endsWith(".gz")) {
return TYPE_ZIP;
}else{
return -1;
}
}


文件的bean类FileBean代码为:

public class FileBean {
/** 文件的路径*/
public String path;
/*文件图片资源的id,drawable或mipmap文件中已经存放doc、xml、xls等文件的图片/
public int iconId;

public FileBean(String path, int iconId) {
    this.path = path;
    this.iconId = iconId;
}

}


FileUtils根据文件类型获取图片资源id的方法,getFileIconByPath(path)代码为:

/*通过文件名获取文件图标/
public static int getFileIconByPath(String path){
path = path.toLowerCase();
int iconId = R.mipmap.unknow_file_icon;
if (path.endsWith(".txt")){
iconId = R.mipmap.type_txt;
}else if(path.endsWith(".doc") || path.endsWith(".docx")){
iconId = R.mipmap.type_doc;
}else if(path.endsWith(".xls") || path.endsWith(".xlsx")){
iconId = R.mipmap.type_xls;
}else if(path.endsWith(".ppt") || path.endsWith(".pptx")){
iconId = R.mipmap.type_ppt;
}else if(path.endsWith(".xml")){
iconId = R.mipmap.type_xml;
}else if(path.endsWith(".htm") || path.endsWith(".html")){
iconId = R.mipmap.type_html;
}
return iconId;
}


上述各种文件类型的图片放置在mipmap中,用于展示文件列表时展示。

FileManager以及其他类的源码,可以点击下面的网址跳转查看和下载:

[点击查看源码(phone目录下的文件)](
)

### 最后

如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

**转发+点赞+关注**,第一时间获取最新知识点

Android架构师之路很漫长,一起共勉吧!

#### 以下墙裂推荐阅读!!!

*   [Android学习笔记参考(敲黑板!!)](
)
*   [“寒冬未过”,阿里P9架构分享Android必备技术点,让你offer拿到手软!](
)
##### **如何做好面试突击,规划学习方向?**

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

![img](https://img-blog.csdnimg.cn/img_convert/1775c64126605884e1dfce13790a288c.png)

我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多;

规划学习方向?**

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

[外链图片转存中...(img-JU3fU4DJ-1630656612039)]

我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多;

##### **[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://codechina.csdn.net/m0_60958482/android_p7)**
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:39:38  更:2021-09-04 17:41:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:27:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码