2024年3月21日发(作者:)
基于Android系统的手机文件管理器的设计与实现
陈煜;周荣辉
【摘 要】Based on Android SDK 2.1, the author designed and implemented
a practical mobile phone file management utility, which mainly provided
functions such as file browsing, file management, file searching, parameter
setting and so on. This thesis introduced the level of file management
utility in Android architecture, displayed file system information by list
view through using a customized array adapter. According to the function
of file management and Android activity lifecycle, the paper designed the
application interface and transition of different activity, applied MVC to
deal with the file operation processes, discussed three kinds of data
storage patterns used in the application.%基于Android SDK 2.1,设计了一款
实用的手机文件管理器,能够较好地实现Android 文件系统的文件浏览、文件管理、
文件搜索、参数设置等功能.文中介绍文件管理器在整个Android系统架构中的层
次,通过自定义适配器实现文件系统信息在listview上的显示.根据文件管理器的功
能并结合Android activity的生命周期,设计了应用的界面及不同activity之间的
转换,把MVC模式应用到文件管理操作的实现过程中,同时探讨了开发中用到的3
种Android 数据存储方式.
【期刊名称】《铁路计算机应用》
【年(卷),期】2012(021)009
【总页数】5页(P47-51)
【关键词】Android;文件管理器;activity;数据存储
【作 者】陈煜;周荣辉
【作者单位】西南交通大学 信息科学与技术学院,成都 610031;西南交通大学 信息
科学与技术学院,成都 610031
【正文语种】中 文
【中图分类】U285;TP39
在移动终端技术与互联网不断发展与融合的今天,手机已从简单的通话工具发展为
集PDA、互动游戏、高分辨率摄像、移动视听于一体的全功能通信、数据处理工
具,手机上的信息存储量也越来越多。但Android平台自身并不提供资源管理器
功能,提供的应用程序接口(API)很简单。因此,需要开发实用的Android手机
文件管理器,以满足广大用户对资源管理的需求。
1 系统总体设计
Android是基于Linux 2.6内核的开源手机操作系统,其全面的计算服务和丰富的
功能支持,完全有能力扩展到移动电话市场以外,发展前景非常广阔。
1.1 系统架构层次介绍
Android 的系统架构主要分为4层[1],从高到低分别是:(1)由运行在Dalvik
虚拟机上的应用程序组成的应用层;(2)由开发人员可以直接调用的组件所组成
的应用框架层;(3)对应用框架层提供支撑的系统运行库层;(4)包括驱动模
型、内存管理、进程管理、网络协议栈等组件的Linux内核层,它依赖于 Linux
2.6 内核,也同时作为硬件和软件栈之间的抽象层。根文件系统使用rootfs,数据
及文件使用yaffs2,是专门为NAND和NOR存储器设计驱动的文件系统。文件
管理器在整个Android系统架构中的层次如图1。
图1 文件管理器在整个系统中的架构层次
1.2 文件管理器的功能及开发环境
类似于PC中的资源管理器,为实现用户对于手机文件资源管理的需求,手机文件
管理器需要实现的功能主要有文件系统浏览,目录跳转,对文件执行复制、移动等
文件管理操作,调用其他应用对特定文件执行相关操作,文件搜索,文件管理器参
数设置及其它设置桌面快捷方式、设置铃声等辅助功能。文件管理器的手机用户用
例图如图2。
图2 手机用户用例图
本应用基于Android SDK 2.1 平台,以Eclipse为集成开发环境,选择Android
上层应用开发通用的Java语言,通过Android SDK自带的adb工具和
emulator模拟器实现程序的调试和运行。
2 系统功能的设计与实现
2.1 文件管理器Activity的设计
根据系统的功能需求,文件管理器主要由3个界面组成,它们分别是作为应用主
界面的FilerActivity、进行参数设置的FilerPreferences-Activity以及进行文件搜
索的SearchActivity。
listview 是Android开发中最常用的组件之一,它通过一个适配器(adapter)以
列表项的形式显示指定的数据,通过使FilerActivity继承自ListActivity,可以满
足用户方便直观地浏览Android文件系统内容的要求。适配器是用来把数据映射
到listview上的中介,通过setListAdapter()函数可以实现当前listview与指定适
配器的联系。为了更灵活地实现本应用中界面的自定义效果,在FilerActivity活
动中定义一个继承自dapter的适配器FileListAdapter,在其中
的构造函数中指定主界面listview中每一行布局的xml文件,同时新建getView()
函数以覆盖父类中的同名函数,在其中实现布局id与指定资源数据的绑定,使主
界面上显示达到的效果。
通过对Android listview的分析可以发现[2],listview的显示是以行为单位进行
的,而整个屏幕列表项的显示是由ut()函数中的for循环
来控制实现的。在一次循环的执行过程中,会依次调用
dAddView()、View()、w()
等函数,最后调用执行文件管理器程序中自定义的getView()函数,覆盖了父类
listview中布局id与资源文件的绑定操作,这也是在程序开发中重写适配器及
getView()函数的目的,如图3。
图3 listview创建过程中的函数调用关系
在应用实现中,无论是文件系统不同目录之间的跳转,还是从其他界面的返回,或
是对SD卡状态的动态响应,都需要及时刷新文件管理器界面,同样也会多次间接
地调用自定义的getView()函数。如前所述,listview通过for循环完成当前界面
上多个view的填充操作后,随着一些后续工作的完成,就可以看到文件系统中当
前目录下的内容,如图4。文件管理器此时进入消息循环状态,用户可能的下一步
操作及对应的处理函数如表1。
选项菜单(OptionsMenu)和上下文菜单(ContextMenu)是Android开发中
最常见的元素,为某些操作提供了合适的入口。开发人员只需预先设计好相应的菜
单选项,以xml文件的形式存放,在随后执行系统回调函数的过程中进行有选择
的显示菜单项即可。相比而言,ContextMenu更适合设置一些与单个view项操
作相关的菜单项,OptionsMenu适合设置一些与整体相关的选项。在这里,可以
把文件重命名、查看属性、设置铃声等操作放在ContextMenu中实现,而搜索
文件、排序设置等操作就由OptionsMenu来完成。
图4 文件管理器主界面效果图
表1 用户的界面操作与对应的处理函数
images/BZ_252_235_1358_1207_ges/BZ_252_235_1450_1207_
ges/BZ_252_235_1586_1207_ges/BZ_252_235_16
76_1207_点击某view视图 onListItemClick选中view中icon图标
getView函数中设定的监视器lickListener按回退键 onKeyDown
按home键 Activity Management管理进程
在Android本身的实现中,大量用到了PreferenceActivity对系统进行信息配置
和管理。文件管理器的开发中,也同样使用FilerPreferences-Activity为用户提
供参数设置的接口。它的布局文件放在固定的路径res/xml下。由FileActivity中
OptionsMenu中的一个菜单项来启动。
另外,文件管理器还提供了文件搜索的功能,即能够根据关键字依次匹配指定目录
下的文件/文件夹名称,并以列表形式显示出搜索的结果,该功能由
SearchActivity来实现。Android的搜索功能能够帮助开发者很好地管理搜索对
话框,使开发人员不需要自己去开发一个搜索框,不需要考虑把搜索框放在什么位
置、搜索框是否会影响当前的界面等不重要的细节问题,所有这些工作都由搜索管
理器(SearchManager)来辅助实现。当在Android搜索栏中输入关键字执行搜
索操作时,搜索管理器将使用一个专门的
Intent“”,将它传给在配置文件Android-
中声明的处理搜索结果的activity,即本应用中的SearchActivity。
通过get-Intent().getStringExtra()函数即可获得用户输入的关键字,然后按关键
字执行搜索操作,并以列表形式显示出得到的结果。在程序中建立了int类型的变
量mFileNumber来记录已找到搜索目标个数,用ArrayList
量mSearchedFiles记录找到的每个目标的路径信息。整个搜索的大致流程如图5。
图5 文件搜索过程流程图
2.2 各应用界面之间的转换
Android应用开发中,每一个界面即对应着一个activity。用户在使用手机软件时,
需要在不同的界面之间来回转换。相对应的程序中的每一个activity都有开始和结
束的过程。
可以在配置文件中声明应用包含的所有活动及每个活动所
要响应的intent,然后在程序中需要的地方用startActivity()函数向系统发送指定
的intent,由系统启动合适的活动响应intent。在程序中,用()函
数结束当前活动,由活动管理器(Activity Mana-ger)确定下一个进程的到来。
在文件管理器的整个应用中,各个activity之间的转换如图6。步操作。
图7 文件复制操作时序图
表2 程序调用文件管理的主要系统函数
images/BZ_253_1272_2355_2245_
另外,在设计中,还应该把对文件进行处理的过程放在一个新建的子线程中执行,
以取得较好的界面显示效果。
控制部分的文件复制操作时序图如图7。
图6 应用中各个activity之间的转换
2.3 文件管理功能的实现
本应用要实现的文件管理功能主要有单个或批量文件的移动、复制、重命名等操作。
针对应用的具体情况,在界面底部建立了一个工具栏(包括yankbar、copybar、
movebar),配合listview中各行的icon按钮,更方便地完成对文件管理的大部
分操作。
MVC(Model-View-Controller)是当前比较流行的软件开发框架,它的思想与
观察者模式类似。Android项目整体就是一种典型的MVC结构,其中广泛使用的
xml布局文件即是view,activity和intent,起到了控制器的作用,提供者对数
据层做了良好的封装,而且提供者把数据管理的范畴从数据库泛化到了数据的概念
[3]。通过使用MVC模式,可以使文件管理器的界面设计工作和文件系统相关处
理操作相互独立,让界面的设计更加灵活,文件管理功能也可以进行模块化的开发。
同时也能够使开发人员专心处理前端界面显示与后台文件系统数据之间的关系,设
计出高效稳定的程序。
就本应用来说,可以事先单独设计好每个界面布局的xml文件并根据实际情况进
行修改和调整,文件的复制、移动等调用系统文件操作函数接口的后台操作就是逻
辑模型部分,控制部分表现在各个activity的生命周期中控制应用界面的各种逻辑
切换,以及相关数据结构的变化,调用对应的处理函数等。文件管理操作中,控制
部分的界面变化比较复杂,如在选取或取消要操作的目标文件、进入新的目录选择
文件、在执行复制或移动等操作的过程中、文件管理操作成功或失败的处理并返回
等等情况,listview界面及底部的操作工具栏都要随之刷新并正确地显示,指示用
户进行下一
在程序中,建立了File类型的全局变量mCur-Dir,存放将要进入或正在显示的目
录信息;ArrayList
的目录中的文件列表;ArrayList
行复制/移动等操作的文件路径集合;Stack
mPathHistory存放操作过程中的目录历史路径;boolean 类型变量
incopymove作为应用,存放是否正处于即将复制/移动文件的状态标志。文件管
理操作执行的过程中所调用的主要系统函数如表2。
2.4 应用中相关数据的存储
在文件管理器的数据存储中,使用了Android的3种数据存储方式:
SharePreference、SQLite和ContentProvider。
SharePreferenc常用于存储较简单的参数设置,文件管理器中
FilerPreferencesActivity活动就是用这种方式,通过文件来持
续化应用配置信息的。当应用刚安装好第一次运行时,配置文件为空,使用默认的
数据给参数赋值,对应用进行配置,当执行FilerPreferences-Activity活动中的
addPreferences-FromResource(ences)后,将在
/data/data//中建立一个以应用包名为前缀的
文件,保存应用的配置数据信息,可以通过adb工具查看文件
的内容,如图8。
图8 用adb工具查看配置文件内容
在使用文件管理器的过程中,用户可以通过FilerPreferencesActivity的界面对参
数设置的内容进行查看或修改。应用在activity退出时对相关的配置信息数据进行
提交,保存在文件中,使用户的设置在下次使用应用时依然有
效。
文件管理器中使用的SQLite数据库保存的信息为每种类型文件的几个属性
(extension,mimetype,icon, action等)的对应关系,数据库文件位于
/data/data//lib中。在应用中主要有2个地方要对数据
库进行查询使用。(1)listview的界面显示,虽然每一行view由适配器确定的布
局都是一样的,但实现时也要根据不同文件的类型,显示不同的资源标示图片以对
不同类型的文件进行区分;(2)在对特定文件执行打开操作时,需要向系统发送
包括type、action等参数在内的intent消息,这些信息也都需要查询数据库得到。
文件管理器中已经事先设置了比较多的数据库元组,它涵盖了如今大部分常见的手
机文件类型,用户也可以在设置界面中添加或修改对应的文件属性信息。
在SQLite数据库的操作中使用了Content-Provider和ContentResolver,严格
来说,它并不是真正的实现数据存储,而是一种提供数据共享及访问的手段。在自
定义的继承自ContentProvider的类中封装好了数据库中的数据,同时重新定义
了插入、删除、查询等成员函数,对外提供一个公共的统一资源标示符(URI)。
其他需要访问数据的地方就可以通过ContentResolver函数,传入这个URI,对
数据进行访问。通过研究程序源码可以发现,ContentResolver的数据获取方法,
如query(),调用的还是对应ContentProvider的query()方法。而
ContentProvider的query()为抽象方法,我们在自定义的子类中已经重写了该成
员函数方法,这样,当调用()方法时,执行的还是应用中
自己写的方法。也就是说,我们在定义数据提供者
MimeProvider的同时也定义了外界访问这个封装数据集的接口,只不过这些已
定义访问的方法是由Content-Resolver的成员函数间接调用而已。
3 结束语
本文从实际应用出发,设计了一款实用、高效的手机文件管理器。通过灵活运用
Android开发的相关技术,成功解决了实现过程中遇到的技术问题,也为同类
Android应用开发提供了较好的参考。Android的开源为开发人员解决各种问题
提供了极大的方便,随着手机厂商不断的加入Android阵营和用户使用量的日益
增多,Android应用开发的明天将会更加美好。
参考文献:
[1]杨丰盛. Android技术内幕:系统卷[M]. 北京:机械工业出版社,2011.
[2]Fan Jiang, Shaoping to Display the Data from Database by
ListView on Android[C]. 2nd International Workshop on Intelligent Systems
and Applications, 2010:1-4.
[3]Hyun Jung La,Soo Dong ed MVC Architecture for Developing
Service-Based Mobile Applications[C].7th International Conference on e-
Business Engineering , 2010:292-299.
[4]王世江,余志龙,陈昱勋,郑名杰. Google Android SDK开发范例大全[M]. 2
版 北京:人民邮电出版社,2010.


发布评论