文件管理器交接文档
文件管理器基本原理:
通过两种方式读取文件信息:
- 通过
MediaStore
读取文件,此数据库是安卓内部的数据库,分为
- MediaStore.Files 此数据库保存所有文件信息;
- MediaStore.Audio.Media 保存音频文件信息
- MediaStore.Video.Media 保存视频文件信息
- MediaStore.Images.Media 保存图片文件信息
各文件分类选项即是通过此方式读取文件信息;
通过getContentResolver().qury 的方式即可读取此ContentProvider中的数据;
- 通过File.listFile来读取文件,此方式可以读取所有文件,包括OTG状态下,以及能够查看某些不被安卓媒体库
MediaStore
收录的文件,全部文件分类即是通过此方式。
基本的文件属性:
MediaStore
数据库中的行列是根据文件信息生产的,关键的几个Columns:
-
MediaStore.Files.FileColumns._ID
:即 "_id" 此项是数据库的id.属性唯一;
-
MediaStore.Files.FileColumns.DATA
:即"_data" 即文件的完整地址,可以根据此地址生成File,属性唯一;
-
MediaStore.Files.FileColumns.DATE_MODIFIED
:最后修改时间
-
MediaStore.Files.FileColumns.SIZE
:文件大小
以下是某些库才存在的且有用的Columns:
-
MediaStore.Video.Media.BUCKET_ID
媒体文件所在文件夹的id;
更多存在的Columns可以在data/目录中拉出此数据库或查看源码了解:
通过File
方式读取的文件,通过文件方法来获取相关信息:
即File.getName(),length(),lastModified()
等方法来获取文件信息,
可以通过阅读File
类了解方法,此处不再赘述;
GreeFileExplorer文件管理及基本构成:
活动 |
简述 |
功能 |
BaseActivity |
基类 |
实现各界面基础功能,导航栏颜色,OTG监听,权限获取,打开关闭输入法等 |
MainActivity |
主界面 |
文件夹主界面,各分类入口界面 |
RemoteActivity |
远程连接 |
实现Ftp远程连接功能,一些界面设置 |
RemoteSeniorActivity |
远程设置 |
Ftp功能设置界面 |
MemoryActivity |
容量显示 |
通过不断读取数据库并分析类型实现动画来显示手机文件类型 |
StoragePathChooseActivity |
区域选择 |
当OTG连接时,进入全部文件时的二级目录 |
FileActivity |
文件界面 |
虚拟类,实现了文件显示,功能设定,方法回调等方法,所有有关于文件的界面都是继承此类的子类,只需要实现不同的文件加载方式。 |
文件类型子类 |
简述 |
功能 |
LatelyFileExplorerActivity |
最近文件 |
通过判断时间从mediaStore中读取文件显示,重写了更多对话框 |
PictureVideoActivity |
视频和图片 |
视频和图片的二级目录,主要是通过BUCKET_ID实现分类 |
FileCategoryActivity |
全部文件 |
依靠读取SD卡获取文件,和其余方式实现不同。可以得到所有文件 |
FavoriteExplorerActivity |
收藏文件 |
通过读取sp中的收藏夹来得到文件,加载方式类似全部文件 |
FileGatherActivity |
收藏和音频 |
收藏和音频的二级目录,用于集合同种类型文件 |
FileExplorerActivity |
基本文件 |
各种子类等分类下的显示,主要通过meidastore数据库读取,然后根据路径或类型来初始化qury条件获取对应的文件 |
SearchActivity |
搜索类 |
实现了搜索方法,从所有文件中根据名称来得到文件,重写了一些对话框的跳转 |
接口 |
简述 |
功能 |
OnOtgStatusChange |
OTG |
判断OTG是否连接的借口,实现在UsbBroadCastReceiver中 |
FileOperationHelper.FileOperationProgress |
回调 |
文件操作进度的回调,包括onStart,OnProgress,onFinish,onError |
IFileOperation |
实现 |
对文件的操作,包括open,move,copy,rename,favorite,share等等,具体实现在 FileOperationHelper中 |
IMemoryView |
回调 |
环状图界面的回调,各种类型的size大小 |
适配器 |
简述 |
功能 |
FileBaseAdapter |
基类 |
基类,实现一些公用方法以及向上转型,包括IFileAdapter,与BaeItem配合 |
MyFileCategoryAdapter |
文件Item |
主文件类型的适配器,显示文件的基本信息,与FileInfo配合 |
GridViewAdapter |
图片集 |
视频和图片的二级目录适配器与ImageFolder配合 |
ImageShowAdapter |
图片 |
图片及视频的适配器,利用Glide加载图片 |
FileGatherAdapter |
文件集 |
收藏和音频的二级目录适配器 |
工具类 |
简述 |
功能 |
SPInfo |
SharedPreferences |
保存一些基本的状态信息 |
FTPServerService |
FTP |
实现Ftp功能的服务 |
UsbBroadCastReceiver |
OTG |
OTG状态的监听广播,负责通各个界面Otg连接状态 |
FileIconLoader |
加载器 |
负责异步加载图片的复杂信息,如图片,视频,音频,文件数量等 |
ApkPathParseName |
文件名转换 |
根据文件路径来判断常用应用,数据库在raw中,拉取自小米 |
FileUtils |
文件工具 |
处理文件大小,文件夹大小,文件隐藏等相关操作 |
MediaScannerHelper |
媒体扫描 |
媒体扫描类,因为每次文件扫描得手动更新数据库 |
MimeUtils |
MIME类型 |
判断文件的MIME类型,当打开或分享文件的时候提供 |
Common |
基础信息 |
此类中根据文件的后缀名来判断文件的基本类型,用于显示对应图标 |
Utils |
工具集合 |
此类中包含大量工具,难以细分,但使用很多很重要 |
FileActivity加载流程图:
一些使用到的第三方库介绍及其链接:
小米文件管理器:MIUI文件管理器社区开源版(Community edition of MIUI File Explorer),主要参考对象;
Glide:An image loading and caching library for Android focused on smooth scrolling https://bumptech.github.io/glide/
XDeCompressor:一个通用的解压缩程序,目前支持12种压缩格式的解压;
pinyin4j:A copy of http://sourceforge.net/projects/pinyin4j, then deploy it to maven central repository.
leakcanary:A memory leak detection library for Android and Java.
swiftp:FTP server for your android device. http://ppareit.github.com/swiftp/
GreeGui:格力公共控件包