一、功能介绍
1、浏览本机应用
此AppManager可以浏览安卓系统下所安装的应用,可自动过滤系统应用和不可进行卸载的第三方应用。

此图为真机软件运行截图(此后均为模拟器运行截图)
为了满足用户需求,提供三种浏览已安装应用的方式,分别为按名称,按日期(最近更新和安装的应用)和按大小进行排序。点击左上角的菜单按钮可以实现不同浏览方式的切换。
在标题栏下方设置有提示信息栏,包括当前的排序方式和应用的个数。
下面为分别按大小、名称和日期排序的示意图:



2、卸载应用
卸载应用为AppManager的主要功能,点击卸载按钮,在弹出的对话中选择确定即可卸载相应的应用。


3、搜索应用及运行相关应用
此AppManager还拥有搜索相关应用的功能,点击应用上方的搜索按钮,输入想搜索的内容,点击右侧箭头按钮即可得到搜索结果,可实行多次搜索。


点击相关应用可直接打开此应用


右图为点击AppCh5打开的相关应用
二、代码原理
1、界面布局
布局主要包括提示信息栏和ListView两部分,采用相对布局使ListView对象在提示信息栏的下方。
对ListView中每一个应用的item创建性的布局文件,在其中显示图标,应用信息以及卸载按钮
为了实现浏览方式切换和搜索功能,创建menu文件,其中包含4个item,分别为按名称排序、按大小排序、按日期排序和搜索。
2、活动
为了完成相应的活动,在所有的代码之前,需要先创建一个用于存储应用信息的类AppInfo,其中应包括以下内容:
/**包名*/
public String packageName;
/**版本号*/
public String versionName;
/**版本号*/
public int versionCode;
/**第一次安装时间*/
public long insTime;
/**更新*/
public long updateTime;
/**程序名*/
public String appName;
/**图标*/
public Drawable icon;
/**字节大小*/
public long byteSize;
/**大小*/
public String size;
以上为活动所需的准备工作,下面来看具体的相关活动。
1)刷新列表
首先是第一次进入程序,需要加载系统的应用,创建一个刷新列表的方法,在其中添加新的线程,获取系统已安装的可操作应用,获取应用信息通过Utils.getAppList()
方法实现,具体方法在第5部分工具类中介绍。
同时此处添加一个进度对话框来提示用户正在加载相关应用。
2)切换排序方式
首先创建三个不同的比较器,分别按照日期,大小和名称来排序,分别按照updateTime
、packageName
和byteSize
来进行相关比较,通过重写onOptionsItemSelected()
方法,比较选中的项的id和三种排序方式比对,选择相应的比较器实现不同的排序方式。
3)搜索功能
设置搜索文本监听器,重写其中的两个方法。
一个是点击提交按钮(需预先设置提交按钮为true),此时采取Utils.getSearchResult()
方法获得搜索结果,具体方法同样在工具类中介绍。
另一个是文本改变时的操作,本应用的搜索功能并不需要在文本改变时进行相关操作,所以不做修改,保持原有的形式。
4)卸载和打开应用功能
卸载应用首先需要为Button按钮设置监听器,在用户点击后获取应用在ListView中的位置和包名,使用Utils.uninstallApk()
方法卸载相应应用,同时在卸载结束后刷新列表。
打开应用则同样通过获取相应点击的item的应用包名,采用Utils.openPackage()
方法打开应用(和卸载的方法类似,在工具类中不再赘述)。
5)工具类
================================
Utils.getAppList()
首先定义一个List< AppInfo>集合,命名为list,其中的对象均为先前创建的AppInfo类。
实例化一个PackageManager,命名为pm,通过pm.getInstalledPackages()
方法获得所有已安装包的信息,存储在一个 List< PackageInfo>中,遍历其中的所有元素,并且筛选出去系统应用和AppManager应用本身。将PackageInfo中的信息放入AppInfo类的一个对象中去,将这个对象添加进list。结束遍历后获得完整的包含应用信息的list。
在Adapter中将对应的图标、应用名、版本号和大小信息交给视图当中的ListView中的每一项。
================================
Utils.getSearchResult()
此方法的返回值是一个List< AppInfo>,采用以下方法判断是否包含搜索的内容:
if(app.appName.toLowerCase().contains(key.toLowerCase()){
}
如果判断语句成立则将这个app添加进新创建的结果集合中,最后把这个集合作为返回值提交。
================================
Utils.uninstallApk()
卸载应用的代码如下:
Uri uri = Uri.parse("package:" + packageName);
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
================================
三、思考与总结
通过此项目的实践,发现自己的Android基础仍有待加强,希望在今后一点点补上短缺,对Android有更深的理解。