隐藏应用功能的需求
在Android的设备上的应用分为系统应用和用户自己安装的应用。其中系统应用是无法删除的,但是部分用户不用系统应用又无法删除,“眼不见为净”,就可以使用隐藏功能将其隐藏起来。有的部分应用可能不想被其它人使用(想你借手机玩的人),就可以使用隐藏功能将其隐藏起来。
隐藏应用功能涉及的知识
1.GridView
GridView是Android中的数据显示控件之一。GridView的视图排列方式与矩阵类似,当屏幕上有很多元素(文字、图片或其他元素)需要显示时,可以使用GirdView。既然有多个元素要显示,就需要使用BaseAdapter来存储这些元素。用户可能会选择其中一个元素进行操作,这就需要设置事件监听setOnItemClickListener来捕捉和处理事件。
2.数据持久化
1) 使用Preferences存储应用程序数据
Preferences是一种轻量级的数据存储机制,他将一些简单的数据类型的数据,包括boolean类型,int类型,float类型,long类型 以及String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录(/data/data/<包名>/shared_prefs/)中,这种Preferences机制广泛应用于存储应用程序中的配置信息。
2)文件I/O
Android平台主要通过java.io.FileInputStream和java.io.FileOutputStream这两个类来实现对文件的读写,java.io.File类则用来构造一个具体指向某个文件或者文件夹的对象。
需要注意的是:每个应用程序所在的包都会有一个私有的存储数据的目录,只有属于这个包中的应用程序才有写入的权限,每个包中应用程序的私有数据目录位于 Android系统中的绝对路径/data/data/<package>/目录中,除了私有目录,应用程序还拥有/sdcard目录即 Android设备上的SD卡的写入权限。文件系统中其他的系统目录,第三方应用程序都是不可写的。
3)SQLite数据库
在实际的应用程序编写中,为了更好的对SQlite数据的创建,打开,更改进行管理,往往会编写一个SQLiteOpenHelper的数据库辅助类来帮助我们创建和打开数据库。
利用SQLiteDatabase对象操作数据库,他除了提供execSQL()和rawQuery()这种直接对SQL语句解析的方法外,还针对insert,upate,delete,select等操作专门定义了相关的方法。
Cursor的使用:查询数据库均会把查询的结果包装在一个Cursor的子类对象中返回。
4)ContentProvider
当数据需要在应用程序之间共享时,我们就可以用ContentProvider为数据库定义一个URI。之后其他应用程序对数据进行查询或者修改时候,只需要从当前上下文对象获得一个ContentResolver传入相应的URI就可以了。
隐藏应用功能详细设计
隐藏应用主要涉及一下四个数据类型
名称 | 类型 | 作用 |
mApps | List | 存放设备上所有安装应用的包名 |
mDisApp | List | 存放显示的应用的包名 |
hm | HashMap | 存放包名与Flag的键值对 |
DB | SQLite数据库 | 存放用户关于隐藏的设置 |
![](http://hi.csdn.net/attachment/201203/7/0_133108631915h7.gif)
用户在操作的过程中可能安装或者卸载应用,所以要考虑hm与DB中数据的一致性,保证两者的一致性是在Activity的生命周期中的onStop()和onCreate()中完成的,两者的流程图如下所示: