实例介绍
第1章 引言
1.1 研究背景及意义
随着智能手机和网络的完美结合,使得智能机的功能越来越强大,浏览网页、网络购物、视频对话都普及到各个手机终端,然而手机平台越广泛,存在的危险就越大,越来越多的安全问题出现在手机的日常运用中[1]。当我们以为只有通过网络才会使手机中毒的时候,没想到智能手机那方便快捷的数据传送方式:WIFI、蓝牙、内存卡等也使我们的手机暴露在病毒感染的危险之中。通讯设备本身所具备的便利的支付收费、支付方式都为不法份子提供了可乘之机。
当人们已经习惯把手机当做一个移动存储设备,作为一个方便携带的移动终端时,风险并不仅来源于手机病毒,也来源于3G网络的的开放性。当手机不慎丢失或者是在手机数据传送的过程中用户数据很容易会被窃听、复制或者篡改。这不仅会面临经济损失,还会遇到甚至更为严重的隐私泄露危险。
手机作为个人通信工具,每天跟随用户,保存了很多个人隐私。并且近年来收费电话,垃圾短信,电话和短信诈骗等层出不穷[2]。如果能从这些方面着眼,解决用户的实际问题,才是目前真正要做的。而这一类的软安全软件目前市场上也有很多,比如,一些来电显示软件,就可以很准确的告知用户来电的归属地,一定程度上杜绝了电话欺诈;另外一些软件可以由用户自定义号码黑名单,主动的屏蔽掉骚扰电话和短信。
1.2 安全软件的现状
随着移动互联网的不断发展,不少互联网厂商都看中了手机安全这块蛋糕,并已占开积极布局。国内电脑安全软件厂商360早在09年就开始推出360手机安全卫士。目前,包括金山、腾讯等互联网公司也都先后推出了各自的手机安全软件。
学术探讨国际著名市场调查机构Juniper Research经过调查后预测,到2011年,全球手机安全市场价值将为50亿美元,不仅仅包括杀毒软件,也包括智能手机的安全接入与安全加固[3]。防病毒、防垃圾、防间谍软件是市场的大头,约占40%左右,安全接入与安全加固软件约占26%[4]。
手机安全软件的最大作用是保护用户的手机安全,但是目前市面上的安全软件都附带了很多的东西,并不是用户真正想使用的,白白占用了很多内存。而且某些功能上给用户带来的体验也不是很好,例如金山手机卫士的程序锁功能,每次用户进入应用程序都要求输入密码,如果用户正在使用某软件的时候突然有人打电话过来,当通话结束后,用户还得再次输入密码,这样的设计使用户很苦恼。
1.3 本文主要工作
本次毕业设计所实现的手机安全卫士是基于Android系统开发的,通过研究目前Android手机用户所面临的安全问题,开发出一款手机安全与管理软件。该软件的主要能包括手机防盗,在用户手机丢失后通过绑定的安全手机号码找回手机;通讯卫士,避免用户被不必要的短信或电话骚扰;程序锁,对某些特定的应用程序加锁,当手机解锁屏幕后第一次使用应用程序需输入密码;软件管理,用户可以运行、卸载或者分享自己喜欢的应用程序给好友;进程管理,通过桌面组件快捷方式管理运行中的进程,是手机保持最佳的运行状态。整个系统主要是通过Eclipse编程实现,其中编写了大量的Android自定义组件来美化系统界面。通过用例的方式说明整个系统的设计与实现和功能描述等。
1.4 本文的组织结构
-
第1章:引言,主要包括应用的研究背景、本文主要工作和论文组织结构。
-
第2章:Android相关技术介绍及分析,主要包括Android开发环境的搭建,Android项目目录结构、Activity、BroadcastReceiver、Service介绍。
-
第3章:手机安全卫士分析与设计,主要是通过用例表的方式分析与设计手机防盗功能、通讯卫士功能、软件管理功能、进程管理功能、系统优化功能。
-
第4章:手机安全卫士详细设计与实现,主要包括应用程序自动升级、应用程序主界面、通讯卫士、手机防盗、软件管理、进程管理、系统优化、病毒查杀、高级工具中的手机号码归属地查询和常用号码查询的实现。
-
第5章:结论与展望,即对本文的总结,并提出可扩展的功能模块说明。
第2章 Android的相关技术介绍及分析
2.1 搭建Android开发环境
在Android应用程序开发过程中使用的工具软件都是可以在网上免费下载的,本手机安全卫士采用的的集成开发环境为安卓官方网站提供的ADT。此外,与开发普通Java程序类似的是在Ubuntu系统下我们需要将SDK的目录添加到系统的环境变量[5]。具体的地址和安装步骤如下:
2.1.1 搭建Ubuntu系统下Java开发环境
1.到官网下载jdk文件,跳转到下载目录
- cd /home/bingo/下载
2.解压到安装目录
- tar -zxvf jdk-7u45-linux-i586.tar.gz -C /home/bingo/install
3.配置环境变量,在/etc/profile.d目录下新建一个叫java.sh的文件
- sudo vi /etc/profile.d/java.sh
4.在java.sh中加入以下内容
- export JAVA_HOME=/home/bingo/install/jdk1.7.0_45
- export CLASSPATH=.:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar:$CLASSPATH
- export PATH=JAVA_HOME/bin:JAVA_HOME/jre/bin:$PATH
5.执行以下命令使上面的配置立即生效
- source /etc/profile
6.输入以下命令,如果显示java的版本信息说明java环境配置成功
- java -version
2.1.2 搭建Ubuntu系统下Android开发环境
1.到官网下载sdk,跳转到下载目录
- cd /home/bingo/下载
2.解压到安装目录,如果不存在则创建该文件夹。如果没安装解压zip格式的软件,在Ubuntu软件中心中安装7zip和rar
- mkdir /home/bingo/install
3.配置环境变量,在/etc/profile.d目录下新建一个叫android.sh的文件
- sudo vi/etc/profile.d/android.sh
4.在android.sh中加入以下内容
- exportANDROID_SDK_ROOT=/home/bingo/install/adt-bundle-linux-x86-20131030/sdk
- exportPATH=ANDROID_SDK_ROOT/tools:ANDROID_SDK_ROOT/platform-tools:$PATH
5.执行以下命令使上面的配置立即生效
- source /etc/profile
6.输入以下命令,如果显示adb的版本信息说明android环境配置成功
- adb version
2.2 Android项目目录结构
-
src文件夹:存放java代码的地方,通过集成开发环境单独指定源代码目录也是可以的。
-
gen文件夹:这里面最关键的是R.java文件,这个文件是集成开发环境帮我们自动生成的,不能手动去更改它,否则系统会报错[7]。里面通过很多内部的静态类来指向res目录中的资源文件,如果开发中发现这个文件,那么很有可能是因为res目录总的文件内部错误或者是文件重复。
-
assets文件夹:存放应用中需要用到的文件,例如存放初始化系统用到的数据库文件、音频资源文件等[8]。
-
res文件夹:主要用来存放系统中的资源文件,例如布局文件、国际化的字符串文件、图像资源文件等。
-
AndroidManifest.xml文件:该文件主要包含了应用程序的基本信息[9]。如果要使用Android系统中的四大组件的话则需要在文件中进行配置,还有就是系统测试和应用也需要用到系统的一些特性,因此,这些也是需要在该文件中进行配置。
-
default.properties文件:在应用正式发布时为了防止别人反编译自己的代码,要在该文件中进行配置。同时也记录了应用程序开发过程中的在集成开发环境中所需要的版本信息。
2.3 Activity
2.3.1 Activity生命周期方法
-
onCreate方法:当Activity第一次被创建的时候,Android系统将会会执行该生命周期方法,或者是用户在没有退出该应用程序的情况下切换到了其他应用程序,而恰好此时系统资源不够用了,这时系统就会回收该Activity,但是并未销毁该Activity。用户突然又切换到当前应用程序,此时系统就会重新执行该生命周期方法[10]。事实上,在实际开发中我们通常在这个方法中初始化界面组件和恢复当前Activity状态。
-
onStart方法:每一次activity从用户不可见到用户可见的时候系统都会执行该生命周期方法,在某些对信息时时性要求高的应用程序中,需要在该方法中更新该界面的数据,例如青蛙卫士中的系统设置界面,为了避免用户使用Android系统自带的设置界面把服务停掉后回到青蛙卫士的系统界面是看到脏数据,每次显示该界面的时候都要重新获取当前正在运行的服务。
-
onRestart方法:当activity对用户不可见并且没有被系统销毁的情况下,如果该activity再一次对用户可见,那么系统就会执行该生命周期方法。
-
onResume方法:当activity获取焦点时,系统会执行该生命周期方法。
-
onPause方法:当activity失去焦点时,系统会执行该生命周期方法,失去焦点并不是指该activity对用户不可见,而是被对话框或者其他透明的activity遮罩,用户是可以看见该activity的,只是不能点击而已,该方法与onResume方法相对应。
-
onStop方法:当activity对用户不可见时,系统将会执行该生命周期方法,该方法与onStart方法是相对应的。
-
onDestory:当activity被系统销毁时,系统会执行该生命周期方法。在实际开发中,通常在该方法内部做一些扫尾动作。例如解绑通过代码方式在该activity中绑定服务、取消在该activity中注册的内容观察者等。
2.3.2 与其他应用程序交互
在我们实际开发的应用程序中,很少有应用程序是单独存在的,或多或少都会使用到第三方应用程序提供的数据,例如实习期间做的一个远程会议软件,需要网服务端上传照片,为了节省开发时间就是直接使用系统自带的相机拍照。这里就已这个例子来介绍Android系统中各应用程序之间的交互。在我们自己应用程序的activity中,把要拍摄照片的全路径名存放在intent中,并且在intent中加入照相的动作和类型,(系统会筛选出手机中所已安装的照相机供用户选择),将该intent对象作为参数传递给startActivityForResult方法。程序中也调用系统自带的相册从相册中选择图片上传,但是相册和相机返回的数据是不同的,所有还需要传递一个请求码给startActivityForResult方法来区分当前操作类型,以便在onActivityResult方法中根据请求码的不同来出来不同的数据[11]。
2.4 BroadcastReceiver
2.4.1 广播接收者的分类
-
普通广播:这种广播并不是同步传输的,并且可以被任意广播接收者收听。这种广播的好处是效率非常高。缺点是任意收听该广播的广播接收者都改变不了该广播中所传递的数据,同时也不能阻止别的广播接收者收听该广播。
-
有序广播:该广播是依照广播接收者的优先级次序,在收听了该广播的广播接收者中根据该数据依次传递。例如有三个广播接收者X,Y,Z,优先级是X> Y >Z。那这个广播首先传递给X,其次再传给Y,最后传递给Z。每个广播接收者都可接结束广播的传递,比如Y结束了广播的传递,Z就不能收到广播消息。另外,X收到广播消息后可以对消息内容进行更改,当广播传递到Y那里的时候,广播接收者Y从广播中取到的数据就是广播接收者X放进去的数据。例如,在Android系统中接收短信广播就是有序广播。
2.4.2 注册广播接收者的两种方式
广播接收者注册方式的不同会影响其存活的时间,用清单文件配置的方式注册的广播接收者可以在其应用程序没有运行的时候继续收听广播[12],例如系统自带的电池电量不足的广播接收者,不需要专程打开某个应用程序来监听它。
还有就是通过代码的方式注册广播接收者,这种方式注册的广播接收者只有在其应用程序运行的时候才能收听广播,在实际开发中的应用场景是时时监听广播事件来更新界面上显示的数据,当界面关闭后该广播接收者就没有存活的意思,所以就不用配置在清单文件中。
2.5 Service
2.5.1 什么是服务
Android中的服务和windows中的服务类似,两者都是运行在后台用户看不见的,其存在的级别会比activity高一些,同样的也是需要在清单文件中进行配置,在主进程中运行。正因为是运行在主进程里的,所以不能直接在服务中执行需要运行很久的操作,应该单独开一个子线程来做这些长时间运行的操作,例如在后台播放音乐,在导航软件中时时获取最新的位置信息等。
2.5.2 本地服务
本地服务,顾名思义就是在某一个应用程序内容运行的服务。在服务外部通过执行startService方法来开起服务和通过执行stopService方法来停止服务。在服务的内部可以通过执行stopSelf或者stopSelfResult来停止服务。值得注意的是,同一时刻同一个服务只会有一个实例存在。
2.5.3 远程服务
远程服务,主要是应用在Android系统中各个应用之间的通信当中,通过接口并且暴露借口给其他应用程序,供其他应用程序调用。其客户端连接到服务点是通过该连接来执行服务里的方法。在执行bindService()方法连接服务时,如果是在activity中绑定的服务,则需要在activity的onDestory()方法中执行unbindService()方法来取消绑定的服务[13]。要说明的是,其中多个客户端是可以绑定同一个服务的,但一个服务只会被开起一次。
第3章 手机安全卫士分析与设计
3.1 手机防盗功能需求分析与设计
-
落地有声:由于我的眼镜是透明的,经常一觉睡醒找不到眼镜,每次这个时候都想能通过手机控制眼镜发出声音以便更快的找到眼镜。落地有声就是由这个想法演变来的,如果用户的爱机刚被盗不久,那么手机还在用户附近的,如果此时设定的安全号码手机可以用,只需要用安全手机发送一条警报指令给丢失的手机,那么丢失的手机就会播放报警音乐,以便用户在第一时间找回丢失的爱机。
-
换卡先知:Android手机换SIM卡都需要重启手机,每次手机重启的时候判断当前SIM卡的串号是否和被保护的SIM卡的串号是否相同,如果不相同,则手机将在后台自动发送短信给安全手机,这样就在小偷不知道的情况下第一时间得知小偷的手机号码,大大提升找回手机的可能性。
-
远程开启防盗:当用户爱机没有开起防盗功能的时候,使用任意的手机发送应用和密码和远程开启防盗功能命令时可以开起防盗功能,并设置当前手机号码安全手机号码,从而为找回手机打下基础。
-
通信拦截:获取丢失的爱机的外拨电话、来电号码、外发短信和收到的短信,并转发给安全手机。这样就可以爱机丢失的第一时间和盗窃者取得联系,也获取了盗窃者朋友的手机号码,进一步增加找回手机的可能性,也大大影响了丢失爱机的正常使用,使盗窃者觉得丢失的爱机拿来也无用,还给手机主人好些。
-
保护隐私:当用户的爱机丢失时,通过短信发送特定的指令,可将丢失手机通讯录里面的所有联系人、通话记录以及短信内容全部删除,及时保护用户的相关隐私信息。
-
充电防盗:在某些特殊的场合,用户的爱机急需充电,而用户又不在手机周围,这时开启手机充电防盗就能很好地监控手机的状况,一旦有其他人蓄意拔出正在充电的手机,手机就会立即发出警报音,并同时发送短信通知安全手机。
设置安全号码用例说明表(表3.1)、设置报警指令用例说明表(表3.2)、远程开启防盗指令用例说明表(表3.3):
设置安全号码用例说明表
用例名称 | 设置安全号码用例 |
---|---|
参与者 | 用户 |
目标 | 设置手机丢失后找回手机的安全手机号码 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1.进入设置手机防盗界面 2.点击安全号码设置条目 3.在弹出的安全号码对话框中输入安全号码 4.点击确定按钮完成安全号码的设置 |
设置报警指令用例说明表
用例名称 | 设置报警指令用例 |
---|---|
参与者 | 用户 |
目标 | 设置让手机发出报警音的指令 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1. 进入设置手机防盗界面 2.点击设置报警指令条目 3.在弹出的报警指令对话框中输入报警指令 4.点击确定按钮保存报警指令 |
设置远程开启防盗指令用例说明表
用例名称 | 设置远程开起防盗指令用例 |
---|---|
参与者 | 用户 |
目标 | 设置远程开起手机防盗功能指令 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1.进入设置手机防盗界面 2.点击设置远程开启防盗指令条目 3.在弹出的远程开启防盗指令对话框中输入远程开起防盗指令 4.点击确定按钮保存远程开起防盗指令 |
3.2 通讯卫士功能需求分析与设计
- 电话拦截:将指定的号码加入电话拦截列表中,那么下次在该号码来电的时候不会通知用户,直接在后台挂断电话,防止用户被别人打骚扰电话。
- 短信拦截:将指定的号码加入到短信拦截列表中,那么下次在该号码发送短信来的时候删除这条短信,避免用户被垃圾信息骚扰。
- 全部拦截:将指定的号码加入到全部截列表中,那么下次该号码发送来的短信和拨打的电话都会被阻止调,避免用户被骚扰。
添加黑名单用例说明表(表3.5)
用例名称 | 添加黑名单用例 |
---|---|
参与者 | 用户 |
目标 | 添加黑名单号码到黑名单列表中 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1.进入通讯卫士界面 2.点击添加按钮 3.在弹出对话框中输入黑名单号码 4.在弹出对话框中选择拦截模式 5.点击确定按钮完成黑名单号码的添加 |
3.3 软件管理功能需求分析与设计
按用户程序和系统程序分类管理手机中的应用程序,可以查看、执行、卸载和分享用户程序。而系统程序只能被查看和执行。
3.4 进程管理功能需求分析与设计
目前市面上的某些Android手机性能并不是很好,多开几个应用程序就会很卡,而正在运行的程序中有些并不是用户所需要的,通过系统服务获得系统中正在运行的应用总数和手机中剩下的内存信息以及运行中进程详细信息展示给用户,然后提供后台进程停止选项,根据用户的选择终止特定的应用程序。并且提供一个桌面组件给用户,使其能在桌面上点一个按钮就能清理正在运行的应用程序。
进程管理用例说明表(表3.6)
用例名称 | 进程管理功能用用例 |
---|---|
参与者 | 用户 |
目标 | 根据用户的操作结束特定的进程 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1.进入进程管理界面 2.选择需要停止的应用程序 3.单击停止按钮结束所选进程 |
3.5 程序锁功能需求分析与设计
在日常生活中,好友之间可能会互相借手机打电话或者是玩游戏,但是用户不想让好友看自己手机里的某些私密应用程序,如果给手机的锁屏加上密码,那么每次解锁屏幕的时候都得输入密码,自己用着也会麻烦,而且手机解锁屏幕后给玩游戏的话好友可以操作手机上的任意一个应用程序。
程序锁功能就是为了解决以上问题,用户不必给屏幕加密码锁,只需要给特定的应用加上应用锁就可以了,只有解屏后第一次进入加锁的应用程序才会要求输入程序锁密码,在应用解锁后只要没有锁屏的情况下,即使用户退出应用程序界面再次进入时不需要输入密码,此时如果好友再让你借手机给他玩,那么用户只需要把屏幕关闭后给他,除了用户的加锁程序,其他程序好友都可以玩。
设置程序锁状态用例说明表(表3.7)、添加需要保护的应用用例说明表(表3.8)、移除已加锁应用用例说明表(表3.9)。
设置程序锁状态用例说明表
用例名称 | 设置程序锁状态用例 |
---|---|
参与者 | 用户 |
目标 | 按照用户指定的方式设置程序锁状态 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1. 进入设置中心界面 2. 点击程序锁条目,选择程序锁条目设置程序锁的状态 |
添加需要保护的应用用例说明表
用例名称 | 添加需要保护的应用用例 |
---|---|
参与者 | 用户 |
目标 | 添加应用程序到已加锁应用列表中 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1. 进入程序锁界面 2. 点击未加锁列表中的应用条目 |
移除已加锁应用用例说明表
用例名称 | 移除已经加锁的应用用例 |
---|---|
参与者 | 用户 |
目标 | 从已加锁应用列表中移除应用程序 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1. 进入程序锁界面 2. 点击已加锁标签 3. 点击已加锁列表中的应用条目 |
3.6 手机杀毒功能需求分析与设计
手机安全厂商和各大应用市场收集了市面上常见的病毒软件,本功能需要收集他们所提供的病毒软件的包名,将其存储到本地数据库中,在执行病毒扫描的时候将手机中所有已安装的用户程序包名与病毒数据库中的包名进行对比,如果相同则询问用户是否卸载该应用程序。
3.7 系统优化功能需求分析与设计
清理应用程序缓存在手机中的缓存数据,但是这需要具备root权限,所以本应用的实现方式打开系统自带的查看应用程序详细信息界面,在该界面中清理缓存数据。
3.8 自动升级功能需求分析与设计
升级方式用例说明表(表3.10)、自动升级用例说明表(表3.11)。
升级方式用例说明表
用例名称 | 应用升级方式用例 |
---|---|
参与者 | 用户 |
目标 | 按照用户指定的方式设置应用升级方式 |
前置条件 | 进入应用程序主界面 |
基本事件流 | 1. 进入设置中心界面 2. 点击自动更新条目,选择升级方式 |
自动升级用例说明表
用例名称 | 安全卫士自动升级用例 |
---|---|
参与者 | 用户 |
目标 | 在wifi打开的情况下,按照用户指定的升级方式升级应用程序 |
前置条件 | 进入安全卫士欢迎界面 |
基本事件流 | 1.用户允许手机安全卫士应用程序 2.程序自动判断应用程序当前版本和服务器最新版本,并显示 3.在弹出的对话框中选择立即更新 |
第4章 手机安全卫士详细设计与实现
4.1 欢迎界面实现
该界面的主要功能是显示软件升级信息和初始化应用程序,如果服务器的最新版本和当前版本相同则显示应用的当前版本信息,否则显示提示升级信息对话框,用户根据需要自行决定是否升级。
欢迎界面提示用户升级应用的实现如图4.1所示:
欢迎界面正在升级应用程序的实现如图4.2所示:
4.1.1 检查升级功能实现
判断当前用户是否设置了自动更新应用程序,手机有没有链接wifi,如果有设置自动更新并且已链接wifi,则从服务器获取最新版本信息和本地版本对比,如果本地版本号低于服务器版本号,则弹出升级对话框供用户选择是否立即升级。
4.1.2 升级对话框显示功能实现
升级对话框采用自定义的对话框,创建一个自定义对话框类继承于Dialog类,其关键是编写自定义布局文件和重写构造方法,实现该对话框能在应用的其他功能模块中能重用。
首先通过抽取样式文件,达到样式代码的重用,然后通过重写构造方法,根据不同的应用场景传递不同的参数,达到自定义对话框的重用。
4.2 应用程序主界面实现
应用程序主页是展示程序的各个功能模块,从而使用户能够快速进入到自己想使用的功能。该界面的另一个很重要的功能就是修改程序锁密码,在该界面连续三次点击菜单按钮弹出修改密码对话框。
其中,应用程序主界面密码认证的实现如图4.3所示:
应用程序主界面功能列表的实现如图4.4所示:
4.3 程序锁实现
通过帧布局实现Android界面的复杂布局,在页面的底部放置两个按钮控制FrameLayout里的两个ListView的显示与否,模拟出TabHost的效果。由于已加锁应用和未加锁应用列表极其相似,所以这里只需在编写一个ListView适配器,在适配器中通过一个flag标记区分当前适配器是未加锁适配器还是已加锁适配器。为了提升程序锁的运行效率,不每次都从数据库中获取最新已加锁应用程序列表,而是用两个集合来分表保存已加锁应用程序和临时不需要保护的应用程序,在每一次收到锁屏事件的时候清空临时不需要保护的集合,在解锁某一个应用程序的时候将该应用程序加入到临时停止保护的集合中。需要注意的是,这里需要通过代码的方式注册监听锁屏事件的广播和解屏事件的广播。
已加锁应用界面的实现如图4.5所示:
未加锁应用界面的实现如图4.6所示:
程序锁密码认证界面的实现如图4.7所示:
4.4 手机防盗实现
手机防盗界面主要是编写ListView及其适配器,根据用户点击不同的条目弹出不同类型的自定义对话框,有些对话框功能不同,但是内容的格式完全相同,这就需要重写自定义度画框的构造方法,根据传入参数的不同显示不同内容和类型的自定义对话框。
手机防盗功能列表界面的实现如图4.8所示:
手机防盗界面设置安全手机号码界面的实现如图4.9所示:
4.5 手机杀毒实现
在Android系统中,每一个应用程序都有一个签名信息。通过反编译360手机安全卫士,获取离线病毒数据库,该数据库中存放了世面上已经存在的病毒应用的签名的MD5信息。当用户进入手机杀毒界面时,通过系统API提供的包管理器获取系统中已安装应用的签名MD5信息,并与离线数据库中的信息对比,如果该签名信息在病毒数据库中存在,则弹出对话框提示用户卸载包含病毒信息应用的应用程序。
正在扫描病毒界面的实现如图4.10所示:
发现病毒应用提示用户卸载界面的实现如图4.11所示:
4.6 系统优化实现
通过系统API提供的包管理器获取每个应用程序所占的存储空间,并通过ListView展示给用户,由于Google工程师为了提升Android系统的安全性,没有Root权限不能删除其他应用的数据信息,本应用的实现方式是当用户点击某个应用条目时,通过显式意图跳转到系统自带应用数据信息清理界面清理缓存数据。
系统优化界面的实现如图4.12所示:
4.7 通讯卫士实现
通讯卫士界面主要也是便表列表和适配器,在注册监听电话到来和短信到来事件的广播接收者时,需要将其优先级设置到最大值,以确保本应用最先收到这两个广播事件,在第一时间挂断电话以及删除最近一条通话记录和短信记录,避免用户看到脏数据。
黑名单管理界面的实现如图4.13所示:
添加黑名单界面的实现如图4.14所示:
4.8 软件管理实现
通过系统API提供的包管理器,获取手机中已安装的应用程序并通过ListView展示给用户,当用户点击某个应用条目后,通过弹出PupupWindow显示功能对话框。当用户点击运行按钮时,通过显式意图运行某个应用程序。当用户点击卸载按钮时,通过隐式意图调用系统软件管理器卸载软件。当用户点击分享按钮时,通过调用系统短信发送器发送要分享的应用的基本信息以及在GooglePlay上的下载地址给好友。
软件管理界面的实现如图4.15所示:
4.9 高级工具实现
高级工具主要提供手机号码归属地查询和常用号码查询功能。通过反编译QQ通讯录,获取手机号码归属地数据库,将用户输入的手机号码与该数据库中的数据进行匹配获取手机号码归属地并显示给用户。通过互联网获取常用手机号码,并录入到自定义数据库中,用户查看常用号码时将该数据库中的数据显示给用户,当用户点击通用号码条目时,通过隐式意图跳转拨号界面。
号码归属地查询界面的实现如图4.16所示:
常用号码查询界面的实现如图4.17所示:
4.10 系统设置实现
系统设置界面的难点是通过自定义组合控件的方式实现自定义view,从而使每一个设置条目只需要引用一个组件,实现代码的复用。为了防止用户打开android系统自带的设置界面关掉安全卫士中的某些服务出现脏数据,每次显示该界面的时候必须在onStart方法内重新获取最新数据。
系统设置界面的实现如图4.18所示:
来电归属地运行效果界面的实现如图4.19所示:
第5章 结论与展望
5.1 结论
半年前,对毕业后有着强烈意愿从事Android开发工作的我,选择了基于Android平台的手机安全卫士的设计与实现这个课题作为我的毕业课题,在长达三个月的Android实习工作中学习到了从事Android开发工作必备的一些技能,例如屏幕适配、兼容多版本系统等,了解了移动应用程序开发的基本流程,同时在老师的细心指导下完成了我的毕业设计作品《青蛙卫士》。
由于Android是基于Linux系统的,所以我尝试着去学习Linux操作系统,在这半年里我学会了Ubuntu系统中开发人员必备一些技能,例如掌握Ubuntu系统下开发Android应用程序的能力,学会使用Ubuntu系统中的常用办公软件等。在编写青蛙卫士的过程中巩固了Android的基础知识,通过看别人的技术博客掌握了Android中常见动画效果、编写自定义组件、编写自定义组合控件以及加深了对Framework层API的印象,从以前看教学视频学习编程过度到看技术博客学习编程,为以后的职业生涯打下了坚实的基础。
5.2 进一步工作的方向
目前为止,青蛙卫士的功能基本上都实现了,但是在一些功能中仍存在不完善之处,例如手机防盗模块没有实现每次手机重启完毕后调用系统前置摄像头拍照以便手机丢失后获取小偷的长相、没有加入第三方平台用户登录、没有编写后台管理系统上传和恢复用户数据等。作为一个手机安全卫士,功能还需在日后的工作中进一步地考查调研并完善。
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论