前言
大家好!欢迎继续来访我的网站。从今天起,我将在这个专题记录我的一个安卓项目实战,我将在此中分享一些个人经验见解,希望能带给大家一点帮助,这个项目将帮助学习安卓SQLite的使用、反射工程、广播服务等等,甚至一些设计模式相关知识(其实目前我也不太懂,只是在读《设计之禅》中形成一点意识,另外也强烈推荐此书)OK,就这样不多说,开始吧!
项目简介
首先介绍一下整个项目,这个项目是关于信息安全方面的,主要是后台悄悄采集用户的程序使用情况,然后将采集到的数据上传到服务器,以供服务器端分析利用数据。难点在于如何隐蔽在后台采集数据,具体需求如下:
需求
- 实时检测程序(包括一部分系统程序和所有的用户程序 )是否在运行,获取程序的运行信息
- 获取手机短信并以文件形式储存在SD卡等待上传
>3. 控制手机一些设备的开启关闭,比如蓝牙
项目框架
动工第一步便是搭建整个项目的框架,首先工程大体分为两大类,一个是引擎类,主要包含用于获取程序使用情况和获取短信等的操作类,另一个是服务类,包含广播接收者服务和管理各服务运行的服务。这两个大类都需要抽象出接口,便于后期维护扩展。笔者使用的是Android Studio开发,工程视图如下图所示:
![image](AP151116/1-PS.jpg 工程视图)
获取短信操作类
工程的框架搭好之后,我们先从简单的开始,就是获取短信的操作。这个类的工作分为两步,第一步获取短信,第二步则是保存数据。那么如何获取短信呢?学完安卓基础的都知道,安卓的通讯录、短信都是储存在SQLite数据的,所以获取短信就是简单的查询数据库操作。ok,开始吧。
首先提一下短信收件箱的URI,通过这个URI才可以连接上我们所需要的数据库表单:
/**
* 短信收件箱数据库 URI
*/
private final String SMS_INBOX_URI = "content://sms/inbox";
以下是数据库查询操作:
Uri smsUri = Uri.parse(SMS_INBOX_URI);
ContentResolver resolver = mContext.getContentResolver();
String[] projection = {
"_id", "address",