基于 Android 平台的手机安全卫士的设计与实现

第 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 开发环境

到官网下载 JDK 文件

跳转到下载目录

cd /home/bingo/下载

解压到安装目录

tar -zxvf jdk-7u45-linux-i586.tar.gz -C /home/bingo/install

配置环境变量

在/etc/profile.d 目录下新建一个叫 java.sh 的文件

sudo vi /etc/profile.d/java.sh

在 java.sh 中加入以下内容

export JAVA_HOME=/home/bingo/install/jdk1.7.0_45export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

执行以下命令使上面的配置立即生效

source /etc/profile

输入以下命令,如果显示 Java 的版本信息说明 Java 环境配置成功

Java -version。

2.1.2 搭建 Ubuntu 系统下 Android 开发环境

到官网下载 sdk

跳转到下载目录

cd /home/bingo/下载

解压到安装目录,如果不存在则创建该文件夹

mkdir /home/bingo/install

如果没安装解压 zip 格式的软件,在 Ubuntu 软件中心中安装 7zip 和 rar

配置环境变量

在/etc/profile.d 目录下新建一个叫 android.sh 的文件[6]

sudo vi /etc/profile.d/android.sh

在 android.sh 中加入以下内容

export ANDROID_SDK_ROOT=/home/bingo/install/adt-bundle-linux-x86-20131030/sdkexport PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH

执行以下命令使上面的配置立即生效

source /etc/profile

输入以下命令,如果显示 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):

表 3.1 设置安全号码用例说明表

用例名称: 设置安全号码用例
参与者: 用户
目标: 设置手机丢失后找回手机的安全手机号码
前置条件: 进入应用程序主界面
基本事件流: 1. 进入设置手机防盗界面 2. 点击安全号码设置条目 3. 在弹出的安全号码对话框中输入安全号码 4. 点击确定按钮完成安全号码的设置

表 3.2 设置报警指令用例说明表

用例名称: 设置报警指令用例
参与者: 用户
目标: 设置让手机发出报警音的指令
前置条件: 进入应用程序主界面
基本事件流: 1. 进入设置手机防盗界面 2. 点击设置报警指令条目 3. 在弹出的报警指令对话框中输入报警指令 4. 点击确定按钮保存报警指令

表 3.3 设置远程开启防盗指令用例说明表

用例名称: 设置远程开起防盗指令用例
参与者: 用户
目标: 设置远程开起手机防盗功能指令
前置条件: 进入应用程序主界面
基本事件流: 1. 进入设置手机防盗界面 2. 点击设置远程开启防盗指令条目 3. 在弹出的远程开启防盗指令对话框中输入远程开起防盗指令 4. 点击确定按钮保存远程开起防盗指令

3.2 通讯卫士功能需求分析与设计

电话拦截:将指定的号码加入电话拦截列表中,那么下次在该号码来电的时候不会通知用户,直接在后台挂断电话,防止用户被别人打骚扰电话。

短信拦截:将指定的号码加入到短信拦截列表中,那么下次在该号码发送短信来的时候删除这条短信,避免用户被垃圾信息骚扰。

全部拦截:将指定的号码加入到全部截列表中,那么下次该号码发送来的短信和拨打的电话都会被阻止调,避免用户被骚扰。

添加黑名单用例说明表(表 3.5):

表 3.5 添加黑名单用例说明表

用例名称: 添加黑名单用例
参与者: 用户
目标: 添加黑名单号码到黑名单列表中
前置条件: 进入应用程序主界面
基本事件流: 1.进入通讯卫士界面 2.点击添加按钮 3.在弹出对话框中输入黑名单号码 4.在弹出对话框中选择拦截模式 5.点击确定按钮完成黑名单号码的添加

3.3 软件管理功能需求分析与设计

按用户程序和系统程序分类管理手机中的应用程序,可以查看、执行、卸载和分享用户程序。而系统程序只能被查看和执行。

3.4 进程管理功能需求分析与设计

目前市面上的某些 Android 手机性能并不是很好,多开几个应用程序就会很卡,而正在运行的程序中有些并不是用户所需要的,通过系统服务获得系统中正在运行的应用总数和手机中剩下的内存信息以及运行中进程详细信息展示给用户,然后提供后台进程停止选项,根据用户的选择终止特定的应用程序。并且提供一个桌面组件给用户,使其能在桌面上点一个按钮就能清理正在运行的应用程序。

进程管理用例说明表(表 3.6):

表 3.6 进程管理功能用例说明表

用例名称: 进程管理功能用用例
参与者: 用户
目标: 根据用户的操作结束特定的进程
前置条件: 进入应用程序主界面
基本事件流: 1.进入进程管理界面 2.选择需要停止的应用程序 3.单击停止按钮结束所选进程

3.5 程序锁功能需求分析与设计

在日常生活中,好友之间可能会互相借手机打电话或者是玩游戏,但是用户不想让好友看自己手机里的某些私密应用程序,如果给手机的锁屏加上密码,那么每次解锁屏幕的时候都得输入密码,自己用着也会麻烦,而且手机解锁屏幕后给玩游戏的话好友可以操作手机上的任意一个应用程序。

程序锁功能就是为了解决以上问题,用户不必给屏幕加密码锁,只需要给特定的应用加上应用锁就可以了,只有解屏后第一次进入加锁的应用程序才会要求输入程序锁密码,在应用解锁后只要没有锁屏的情况下,即使用户退出应用程序界面再次进入时不需要输入密码,此时如果好友再让你借手机给他玩,那么用户只需要把屏幕关闭后给他,除了用户的加锁程序,其他程序好友都可以玩。

设置程序锁状态用例说明表(表 3.7)、添加需要保护的应用用例说明表(表 3.8)、移除已加锁应用用例说明表(表 3.9):

表 3.7 设置程序锁状态用例说明表

用例名称: 设置程序锁状态用例
参与者: 用户
目标: 按照用户指定的方式设置程序锁状态
前置条件: 进入应用程序主界面
基本事件流: 1. 进入设置中心界面 2. 点击程序锁条目,选择程序锁条目设置程序锁的状态

表 3.8 添加需要保护的应用用例说明表

用例名称: 添加需要保护的应用用例
参与者: 用户
目标: 添加应用程序到已加锁应用列表中
前置条件: 进入应用程序主界面
基本事件流: 1. 进入程序锁界面 2. 点击未加锁列表中的应用条目

表 3.9 移除已加锁应用用例说明表

用例名称: 移除已经加锁的应用用例
参与者: 用户
目标: 从已加锁应用列表中移除应用程序
前置条件: 进入应用程序主界面
基本事件流: 1. 进入程序锁界面 2. 点击已加锁标签 3. 点击已加锁列表中的应用条目

3.6 手机杀毒功能需求分析与设计

手机安全厂商和各大应用市场收集了市面上常见的病毒软件,本功能需要收集他们所提供的病毒软件的包名,将其存储到本地数据库中,在执行病毒扫描的时候将手机中所有已安装的用户程序包名与病毒数据库中的包名进行对比,如果相同则询问用户是否卸载该应用程序。

3.7 系统优化功能需求分析与设计

清理应用程序缓存在手机中的缓存数据,但是这需要具备 root 权限,所以本应用的实现方式打开系统自带的查看应用程序详细信息界面,在该界面中清理缓存数据。

3.8 自动升级功能需求分析与设计

升级方式用例说明表(表 3.10)、自动升级用例说明表(表 3.11):

表 3.10 升级方式用例说明表

用例名称: 应用升级方式用例
参与者: 用户
目标: 按照用户指定的方式设置应用升级方式
前置条件: 进入应用程序主界面
基本事件流: 1. 进入设置中心界面 2. 点击自动更新条目,选择升级方式

表 3.11 自动升级用例说明表

用例名称: 青蛙卫士自动升级用例
参与者: 用户
目标: 在 wifi 打开的情况下,按照用户指定的升级方式升级应用程序
前置条件: 进入安全卫士欢迎界面
基本事件流: 1.用户允许手机安全卫士应用程序 2.程序自动判断应用程序当前版本和服务器最新版本,并显示 3.在弹出的对话框中选择立即更新

第 4 章 手机安全卫士详细设计与实现

4.1 欢迎界面实现

该界面的主要功能是显示软件升级信息和初始化应用程序,如果服务器的最新版本和当前版本相同则显示应用的当前版本信息,否则显示提示升级信息对话框,用户根据需要自行决定是否升级。

欢迎界面提示用户升级应用的实现如图 4.1 所示:

图 4.1 欢迎界面提示用户升级应用

欢迎界面正在升级应用程序的实现如图 4.2 所示:

图 4.2 欢迎界面正在升级应用

4.1.1 检查升级功能实现

判断当前用户是否设置了自动更新应用程序,手机有没有链接 wifi,如果有设置自动更新并且已链接 wifi,则从服务器获取最新版本信息和本地版本对比,如果本地版本号低于服务器版本号,则弹出升级对话框供用户选择是否立即升级。

4.1.2 升级对话框显示功能实现

升级对话框采用自定义的对话框,创建一个自定义对话框类继承于 Dialog 类,其关键是编写自定义布局文件和重写构造方法,实现该对话框能在应用的其他功能模块中能重用。

首先通过抽取样式文件,达到样式代码的重用,然后通过重写构造方法,根据不同的应用场景传递不同的参数,达到自定义对话框的重用。

4.2 应用程序主界面实现

应用程序主页是展示程序的各个功能模块,从而使用户能够快速进入到自己想使用的功能。该界面的另一个很重要的功能就是修改程序锁密码,在该界面连续三次点击菜单按钮弹出修改密码对话框。

其中,应用程序主界面密码认证的实现如图 4.3 所示:

图 4.3 应用程序主界面密码认证

应用程序主界面功能列表的实现如图 4.4 所示:

图 4.4 应用程序主界面功能列表

4.3 程序锁实现

通过帧布局实现 Android 界面的复杂布局,在页面的底部放置两个按钮控制 FrameLayout 里的两个 ListView 的显示与否,模拟出 TabHost 的效果。由于已加锁应用和未加锁应用列表极其相似,所以这里只需在编写一个 ListView 适配器,在适配器中通过一个 flag 标记区分当前适配器是未加锁适配器还是已加锁适配器。为了提升程序锁的运行效率,不每次都从数据库中获取最新已加锁应用程序列表,而是用两个集合来分表保存已加锁应用程序和临时不需要保护的应用程序,在每一次收到锁屏事件的时候清空临时不需要保护的集合,在解锁某一个应用程序的时候将该应用程序加入到临时停止保护的集合中。需要注意的是,这里需要通过代码的方式注册监听锁屏事件的广播和解屏事件的广播。

已加锁应用界面的实现如图 4.5 所示:

图 4.5 已加锁应用界面

未加锁应用界面的实现如图 4.6 所示:

图 4.6 未加锁应用界面

程序锁密码认证界面的实现如图 4.7 所示:

图 4.7 程序锁密码认证界面

4.4 手机防盗实现

手机防盗界面主要是编写 ListView 及其适配器,根据用户点击不同的条目弹出不同类型的自定义对话框,有些对话框功能不同,但是内容的格式完全相同,这就需要重写自定义度画框的构造方法,根据传入参数的不同显示不同内容和类型的自定义对话框。

手机防盗功能列表界面的实现如图 4.8 所示:

图 4.8 手机防盗功能列表界面

手机防盗界面设置安全手机号码界面的实现如图 4.9 所示:

图 4.9 手机防盗绑定安全手机号码界面

4.5 手机杀毒实现

在 Android 系统中,每一个应用程序都有一个签名信息。通过反编译 360 手机安全卫士,获取离线病毒数据库,该数据库中存放了世面上已经存在的病毒应用的签名的 MD5 信息。当用户进入手机杀毒界面时,通过系统 API 提供的包管理器获取系统中已安装应用的签名 MD5 信息,并与离线数据库中的信息对比,如果该签名信息在病毒数据库中存在,则弹出对话框提示用户卸载包含病毒信息应用的应用程序。

正在扫描病毒界面的实现如图 4.10 所示:

图 4.10 正在扫描病毒界面

发现病毒应用提示用户卸载界面的实现如图 4.11 所示:

图 4.11 发现病毒应用提示用户卸载界面

4.6 系统优化实现

通过系统 API 提供的包管理器获取每个应用程序所占的存储空间,并通过 ListView 展示给用户,由于 Google 工程师为了提升 Android 系统的安全性,没有 Root 权限不能删除其他应用的数据信息,本应用的实现方式是当用户点击某个应用条目时,通过显式意图跳转到系统自带应用数据信息清理界面清理缓存数据。

系统优化界面的实现如图 4.12 所示:

图 4.12 系统优化界面

4.7 通讯卫士实现

通讯卫士界面主要也是便表列表和适配器,在注册监听电话到来和短信到来事件的广播接收者时,需要将其优先级设置到最大值,以确保本应用最先收到这两个广播事件,在第一时间挂断电话以及删除最近一条通话记录和短信记录,避免用户看到脏数据。

黑名单管理界面的实现如图 4.13 所示:

图 4.13 黑名单管理界面

添加黑名单界面的实现如图 4.14 所示

图 4.14 添加黑名单界面

4.8 软件管理实现

通过系统 API 提供的包管理器,获取手机中已安装的应用程序并通过 ListView 展示给用户,当用户点击某个应用条目后,通过弹出 PupupWindow 显示功能对话框。当用户点击运行按钮时,通过显式意图运行某个应用程序。当用户点击卸载按钮时,通过隐式意图调用系统软件管理器卸载软件。当用户点击分享按钮时,通过调用系统短信发送器发送要分享的应用的基本信息以及在 GooglePlay 上的下载地址给好友。

软件管理界面的实现如图 4.15 所示:

图 4.15 软件管理界面

4.9 高级工具实现

高级工具主要提供手机号码归属地查询和常用号码查询功能。通过反编译 QQ 通讯录,获取手机号码归属地数据库,将用户输入的手机号码与该数据库中的数据进行匹配获取手机号码归属地并显示给用户。通过互联网获取常用手机号码,并录入到自定义数据库中,用户查看常用号码时将该数据库中的数据显示给用户,当用户点击通用号码条目时,通过隐式意图跳转拨号界面。

号码归属地查询界面的实现如图 4.15 所示:

图 4.16 号码归属地查询界面

常用号码查询界面的实现如图 4.16 所示:

图 4.17 常用号码查询界面

4.10 系统设置实现

系统设置界面的难点是通过自定义组合控件的方式实现自定义 view,从而使每一个设置条目只需要引用一个组件,实现代码的复用。为了防止用户打开 Android 系统自带的设置界面关掉安全卫士中的某些服务出现脏数据,每次显示该界面的时候必须在 onStart 方法内重新获取最新数据。

系统设置界面的实现如图 4.18 所示:

图 4.18 系统设置界面

来电归属地运行效果界面的实现如图 4.19 所示:

图 4.19 来电归属地运行效果

第 5 章 结论与展望

5.1 结论

半年前,对毕业后有着强烈意愿从事 Android 开发工作的我,选择了基于 Android 平台的手机安全卫士的设计与实现这个课题作为我的毕业课题,在长达三个月的 Android 实习工作中学习到了从事 Android 开发工作必备的一些技能,例如屏幕适配、兼容多版本系统等,了解了移动应用程序开发的基本流程,同时在林老师的细心指导下完成了我的毕业设计作品《青蛙卫士》。

由于 Android 是基于 Linux 系统的,所以我尝试着去学习 Linux 操作系统,在这半年里我学会了 Ubuntu 系统中开发人员必备一些技能,例如掌握 Ubuntu 系统下开发 Android 应用程序的能力,学会使用 Ubuntu 系统中的常用办公软件等。在编写青蛙卫士的过程中巩固了 Android 的基础知识,通过看别人的技术博客掌握了 Android 中常见动画效果、编写自定义组件、编写自定义组合控件以及加深了对 Framework 层 API 的印象,从以前看教学视频学习编程过度到看技术博客学习编程,为以后的职业生涯打下了坚实的基础。

5.2 进一步工作的方向

目前为止,青蛙卫士的功能基本上都实现了,但是在一些功能中仍存在不完善之处,例如手机防盗模块没有实现每次手机重启完毕后调用系统前置摄像头拍照以便手机丢失后获取小偷的长相、没有加入第三方平台用户登录、没有编写后台管理系统上传和恢复用户数据等。作为一个手机安全卫士,功能还需在日后的工作中进一步地考查调研并完善。

♻️ 资源

大小: 26.8MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87379046

基于 Android 平台的手机安全卫士的设计与实现【100010420】相关推荐

  1. 基于android平台的手机安全卫士的设计与实现 开题报告,开题报告-基于android的手机安全卫士的设计与开发.doc...

    毕业设计开题报告 题 目: 基于Android的手机安全卫士的设计与开发 专 业 计算机科学与技术 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 电气信息工程学院 专 业 负 责 人 ...

  2. 基于Android平台的手机安全卫士的设计与实现

    目 录 第1章 引言 1 1.1 研究背景及意义 1 1.2 安全软件的现状 1 1.3 本文主要工作 2 1.4 本文的组织结构 2 第2章 Android的相关技术介绍及分析 3 2.1 搭建An ...

  3. 基于android平台的手机游戏的设计与实现,基于Android平台手机游戏社区的设计与实现...

    摘要: 在移动终端性能的不断提高和移动互联网的不断普及,SNS社区以及不再只停留在电脑上,逐渐的走进了手机里,与以往的社区相比,手机社区有更好的实时性,以及能够更方便的提供LBS服务功能.目前每个社区 ...

  4. Android导航软件设计开发,基于Android平台的手机导航系统的设计与实现

    摘要: 互联网和移动智能技术的快速发展,平板电脑,智能手机,已经走进我们生活的方方面面,购物.外卖.租房.工作.旅游,医疗各个行业.我们无时无刻不在享受互联网和移动终端带来的便利.GPS全球卫星定位带 ...

  5. android教育游戏设计方案,基于Android平台的手机教育游戏设计与开发

    摘要: 随着信息化教育的飞速发展,以移动设备作为学习平台的学习方式,越来越受到学者们的重视.在当今时代,手机是移动设备的主流,尤其是使用安卓系统的手机用户越来越多.安卓手机以其系统完全开源的独特优势, ...

  6. Android毕业设计——基于Android+Eclipse的手机安全卫士设计与实现(毕业论文+程序源码)——手机安全卫士

    基于Android+Eclipse的手机安全卫士设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+Eclipse的手机安全卫士设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  7. 基于Android平台的手机安全助手的设计与实现

    1.研究(设计)目的意义及国内外研究状况和应用前景(附参考文献): (一)选题的目的和意义 Android曾经是一家创立于旧金山的公司的名字,该公司于2005年8月份被Google收购,并从此踏上了飞 ...

  8. 基于Android的记账APP论文,基于Android平台的手机记账系统的设计与实现

    摘要: 在经济社会中,"理财"一词对于人们来说已不再陌生.人们的生活收入稳步上升,用于工作,住房,休闲娱乐的财务支出增多,做好详细的收支计划,将有利于对个人,家庭的经济收入,支出状 ...

  9. 基于android地图国内外研究,开题报告-基于Android平台的手机Web地图服务设计.doc...

    开 题 报 告 毕业设计题目: 基于Android平台的 手机Web地图服务设计 浙江理工大学本科毕业设计(论文)开题报告 班 级 10计算机科学与技术1班 姓 名 课题名称 基于Android平台的 ...

最新文章

  1. 比特币现金(BCH)社交平台推出新玩法
  2. Github+Gitlb的使用
  3. asp.net 表单总结
  4. shiro前后端分离_为什么要前后端分离?前后端分离的优点是什么?
  5. centos7 mysql创建表_centos7下创建数据库和用户
  6. URL重写:RewriteCond指令与RewriteRule 指令格式
  7. 提高Android Studio运行、编译速度方案
  8. 一个线上SQL死锁异常分析:深入了解事务和锁
  9. Locust接口压力测试
  10. Reactor 线程模型
  11. ubuntu更改ip地址 网官 dns,使ubuntu的ip地址每次启动都是固定
  12. [USACO16DEC]Team Building团队建设
  13. 鸿蒙也是基于linux吗,鸿蒙系统是基于linux开发的吗
  14. 跳转第三方App或网页进行导航
  15. 玩转HTML(004)
  16. 调用泛微OA接口的一些基本常识
  17. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.4.0版)
  18. linux grep gz文件内容,如何查询targz的压缩包文件的内容
  19. 201621123031 《Java程序设计》第4周学习总结
  20. EDM营销中老外眼中的常见垃圾邮件关键词

热门文章

  1. 数据分析大数据面试题大杂烩02
  2. 5行Python代码就能让你的电脑 “永不息屏”?
  3. 吗西香豆素,CAS号:17692-56-7
  4. 负数的二进制与十进制转化
  5. 千万级高并发秒杀系统设计套路!超详细解读~~
  6. 《零基础入门学习Python》第063讲:论一只爬虫的自我修养11:Scrapy框架之初窥门径
  7. python挖矿代码_python检测挖矿特征的几种方式
  8. 浩辰建筑CAD软件新手入门教程:在位编辑
  9. 精益生产如何与数字化结合?
  10. Greenplum 实时数据仓库实践(9)——Greenplum监控与运维