资源描述
安卓手机安全卫士程序设计报告
96
2020年4月19日
文档仅供参考
计算机与信息工程学院
《Android课程设计》报告
班 级: 计算机与信息工程学院15级6班
专 业: 软件工程
题 目: 手机安全卫士
指导教师: 樊富有
导师职称: 教 授
学 号:
姓 名: 胡隆河
同 组 人: 陈雨,吴秋,唐育,张欢,蒋安琼,张穗,邹倩,甘语楠,胡隆河
宜宾学院
年 11 月 23 日
目录
一 目的及引言 4
二 总体设计 5
1 手机防盗 5
2 骚扰拦截 5
3 软件管理 5
4 进程管理 6
5 流量管理 6
6 病毒查杀 6
7 缓存清理 6
8 高级工具 6
9 设置 6
三 详细设计 7
1 软件升级界面 7
2 手机防盗 8
3 远程指令控制流程 9
4 手机杀毒 10
四 数据库设计 11
1 概念设计 11
2 逻辑设计 12
五 界面设计 14
1 主界面设计 14
2 防盗功能界面设计 15
3 骚扰拦截界面设计 17
4 程序管理界面设计 18
5 进程管理界面设计 19
6 流量管理界面设计 20
7 清理缓存界面设计 21
8 病毒查杀界面设计 22
9 高级功能界面设计 23
10 设置功能界面设计 24
六 调试与测试 25
七 心得体会 27
八 程序清单 28
一 目的及引言
此次试验是实现一个手机安全的软件,利用Android的四大组件:Activity、Service、Broadcast Receiver、Content Provider,采用MVC设计模式。采用JAVA为编辑语言,利用SQLite轻量级数据库为系统提供数据支持。主要功能有:手机防盗、通讯卫士、软件管理、进程管理、流量统计、手机杀毒、缓存管理、高级工具、设计中心等九大功能。
二 总体设计
安全卫士
手机防盗
骚扰拦截
软件管理
进程管理
流量管理
病毒查杀
清理缓存
高级工具
设置
图2-1 系统功能模块图
1 手机防盗
sim卡变更报警:当绑定手机号码卡后,设备更换了手机卡讲提示报警。
gps追踪:获取当前位置,及时上传到远程服务器保存,远程得到当前设备的位置。能够远程追踪当前设备的位置。
销毁数据:远程控制手机,自动清空手机内的所有数据,包括:通讯录,短信,内存数据。
远程锁屏:远程锁定手机,能够远程向手机发送锁屏指令,控制手机锁屏和重新设置锁屏密码。
2 骚扰拦截
电话拦截:添加拦截的手机号,对已添加的号码的电话拦截。
短信拦截:添加短信服务号码,拦截已添加的号码发来的所有短信,禁止接收。
3 软件管理
用户程序:是将用户从第三方的应用平台上下载的APP应用数据信息读取出来,进行卸载、运行、分享、详情的操作。
系统程序:是将手机本身自带的系统应用程序数据信息读取出来,进行卸载、运行、分享、详情的操作。
这个模块主要读取手机中各个应用程序的大小和包名。
4 进程管理
获取手机中正在运行中的所有系统进程和用户进程,而且能够对她们进行结束和查看信息,能够同时禁止多个运行中的进程。系统进程不能够直接终止,只能经过系统自带的终止功能让用户自己终止。不显示系统核心进程。
5 流量管理
这个模块中主要读取系统文件,来对用户流量进行检测,主要显示的有:上传总流量、下载总流量和共计流量使用情况。
下面还是显示的是对应的应用的logo和应用名称,上传文件使用流量数和下载使用流量数,还有对应的该应用使用流量的总数目。
6 病毒查杀
这个模块中使用的是腾讯的病毒数据库,来查对应的应用的MD5码看是不是在病毒数据库中存在,在界面上显示的是:已扫描软件的个数,发现病毒的个数,下面就是对应的扫描的软件的名称若不在病毒数据库就显示扫描安全,否则就会显示病毒存在。
7 缓存清理
这个模块中我是将用户在本地的缓存文件清除在界面上显示的是:要清除缓存的软件的个数,共占内存有多少。在屏幕的最下方的位置我放了一个按钮,能够一次全清除。
8 高级工具
电话归属地查询:使用了正则表示式来判断电话号码的合法性,根据用户输入的电话号码来进行对号码的识别和归属地的查询。常见号码:这儿主要是能够存储一些比较常见的电话号码,比如订餐,家人,学校等特殊的号码,能够随时提取拨打。程序加密:能够对用户已经安装的程序执行加密操作,让用户在打开该程序时需要输入相应的密码才能够进入程序,相当于给程序外加一层安全防护。
9 设置
主要模块有:自动更新设置、电话归属地显示设置、归属地提示框的风格设置、归属地显示提示框位置设置、黑名单设置、程序加密设置。
三 详细设计
经过系统的分析,该软件总体上是有一个主界面和主界面上的一些模块组成,在主界面上包含手机防盗、骚扰拦截、软件管理、进程管理、流量管理、病毒查杀、清理缓存、高级工具以及设置等九个模块。该软件能够对手机中的所有软件进行基本的管理,满足用户安全性和使用性的要求。
1 软件升级界面
当打开软件时会自动检测更新,流程图如3-1所示:
图3-1升级界面流程图
2 手机防盗
手机防盗模块经过预设密码判断手机是否被盗,如果发生手机被盗事件,手机将自动经过自定义协议发送手机中SIM卡信息和手机的位置信息给安全号码。如图:3-2所示:
图3-2 防盗流程图
3 远程指令控制流程
手机防盗的核心是经过建立Android下的super管理员功能,能远程经过短信指令,对手机设置锁屏密码,远程锁定手机屏幕,远程格式化手机内存卡,恢复出厂设置,而且用户也不能卸载软件,能极大的保护用户的隐私安全。如发生手机被盗事件,super管理员经过安全手机发送预设指令控制被绑定的手机,从而锁定手机或者销毁数据。短信指令控制,流程图如3-3所示:
创立广播
重写onReceiver()
#*wipedata*#
判断手机防盗是否开启
获取所有短信内容
#*localtion*#
获取地址发送给安全号码
获取最后GPS信息发送给安全号码
让手机播放报警信号
清除手机数据
#*getgps*#
#*alarm*#
图3-3远程控制指令流程图
4 手机杀毒
手机杀毒的实现需要先用PackageManager遍历手机上的所有程序,将扫描到的包名以及数字签名鱼数据库中的病毒对比,发现相同的就视为病毒,弹出删除病毒的界面将其杀死,完成后,返回手机杀毒的界面。手机杀毒流程图如图3-4所示:
图3-4手机杀毒流程图
四 数据库设计
1. 数据信息要求:主要黑名单信息、号码归属地信息、常见号码信息、程序锁信息、手机病毒信息等数据信息。
2. 数据信息处理要求:系统主要完成黑名单信息、号码归属地信息、常见号码信息、程序锁信息、手机病毒信息等信息的添加、删除、修改、查看功能,系统中号码归属地信息和手机病毒信息使用频率比较高,因此在处理方式上要求效率比较高。
3. 数据信息安全性与完整性要求:程序锁信息属于重要信息,因此要求保证数据信息安全,数据信息不能外泄。
1 概念设计
1. 黑名单实体E-R图
经过对系统需求分析抽象出黑名单、号码归属地、常见号码、程序锁、手机病毒等实体对象,相关实体对象属性图如图4-1所示。
图4-1 黑名单实体属性图
2.号码归属地
号码归属地主要是对电话号码的信息进行查询操作,主要包括号码类型、号码归属城市和号码所属城市的区号,如图4-2所示。
图4-2 号码归属地实体属性图
3.手机病毒数据实体类
手机病毒数据实体类主要是存储手机的MD5码,主要字段有:病毒描述、MD5数字签名、病毒ID、病毒类型和应用程序的包名如图4-3所示。
图4-3 手机病毒实体属性图
2 逻辑设计
1.blacknumber(黑名单表)
黑名单表主要用来将用户不愿意接听的电话和短信进行拦截,该表的主要字段及其含义如图4-4所示。
图4-4 黑名单信息表
2. address_db(电话归属地表)
电话归属地表主要用来用户查看来电信息的归属地和查看特定号码的归属地,该表的主要字段及其含义如图4-5所示。
图4-5 号码归属地信息表(address_db)
3.applock(程序锁表)
程序锁的数据信息表主要用来保存用户将设置的密码添加了程序锁之后进入应用会读取程序锁表中的数据,该表的主要字段及其含义如图4-6所示。
图4-6程序锁的信息表(applock)
4.antivirus(手机病毒数据信息表)
手机病毒数据信息表主要用来保存用户的手机应用数据和病毒数据库做比对从而进行病毒的查杀,该表的主要字段及其含义如表4-7所示。
图4-7手机病毒数据信息表
五 界面设计
1 主界面设计
主界面为用户经常操作的界面,而且手机卫士的所有的功能都在主界面里展示,在这个界面用户能够清理手机缓存、设置手机防盗、管理手机的软件和进程等。
其设计过程是界面最上端放置的是一个View控件,放置LOGO,其下方放置是一个自定义的FocusedTextView类,让其继承TextView,重写isFocused的方法,return true,这样就骗过了系统,让系统误以为FocusedTextView获取到焦点,这样就能产生一个跑马灯的效果展现到界面上。其下方的模块就是一个设置numColumns为3的GridView显示出来的,主界面展示如图5-1所示
图5-1主界面
2 防盗功能界面设计
手机防盗也是手机卫士最为核心的功能模块,其主要是保护用户的隐私不被泄露,设置初试密码后可开启防盗功能。手机丢失时,手机接收到SIM卡更换的信息会向事先设置的安全号码发送报警短信,用户经过远程发送设定的指令可遥控手机销毁数据,保护隐私。
(1)设置密码与输入密码设计
开启手机防盗功能第一步,要先设置安全密码,这个对话框设计是定义一个竖直对齐的线性布局LinearLayout,上面定义一个文本内容为设置密码TextView控件,下方设置两个输入类型为textPassword 的EditText,用来输入密码和重复密码,而在下方再放置一个水平对齐的线性布局,添加两个权重相同的Button按钮。其显示效果如图5-2所示。
图5-2 手机防盗-设置密码界面
完成密码设置后,再进入手机防盗功能时,会跳转进入到一个用户输入密码的界面,其页面布局和设置密码的页面布局一样,显示效果如图5-3所示。
图5-3手机防盗-输入密码界面
(2)设置向导的详细设计设计
设置向导分四步完成设置手机的防盗功能,其具体的设计如下面四步所示。
图5-4手机防盗设置向导一 图5-5手机防盗设置向导二
图5-6防盗设置向导三图 图5-7防盗设置向导四 图5-8防盗设置完成界面
3 骚扰拦截界面设计
通讯卫士能够让用户添加黑名单,在界面上有个添加按钮,点击添加后,在弹出的对话框里输入要加入黑名单的号码,并选择拦截模式,拦截模式有全部拦截、电话拦截、短信拦截三种模式,点击确定,就能够添加成功,添加的数据存储到数据库里,并在通讯卫士界面显示出来。其界面展示如图5-9、图5-10所示。
图5-9骚扰拦截主界面图 5-10骚扰拦截添加界面
4 程序管理界面设计
程序管理这个模块经过Listview把手机里面的应用程序给展示到界面上,在界面的上访放置两个Textview用来显示用户手机内存(rom)可用的大小和SD卡可用内存的大小,下面是一个Listview经过遍历把应用程序显示到界面上,然后给你每一个Listview条目都注册了点击事件,在点击每一个条目时,可用Popupwindow方法弹出一个悬浮窗体,上面包含卸载、启动、分享三个点击事件,在点击这些小按钮的时候,可启动其对应的activity,方便于用户的操作。其界面展示如图5.11所示。
图5-11程序管理界面
5 进程管理界面设计
进程管理界面的UI和软件管理界面的UI大致类似,其顶部显示的内容也是经过Textview显示出来的,经过ActivityManager拿到手机正在运行的进程数量和可用内存(ram)的大小,再设置显示到界面上。Textview下的布局是一个Listview,显示进程的界面是经过创立一个LinearLayout节点的布局文件,里面放置一个Imageview和Textview,右边再放置一个checkbox,来选择要清理的进程。经过View.inflate方法把xml布局文件填充成一个view对象,显示到界面上。其主要界面展示如图5-12所示。
图5-12进程管理界面
6 流量管理界面设计
流量统计界面的UI和软件管理界面的UI大致类似,其顶部显示的内容也是经过Textview显示出来的,经过ActivityManager拿到手机正在运行的进程数量和可用内存(ram)的大小,再设置显示到界面上。其主要界面展示如图5-13所示
图5-13流量管理界面
7 清理缓存界面设计
缓存清理界面的UI和软件管理界面的UI大致类似,其顶部显示的内容也是经过Textview显示出来的,经过ActivityManager拿到手机正在运行的进程数量和可用内存(ram)的大小,再设置显示到界面上。其主要界面展示如图5-14所示:
图5-14清理缓存界面
8 病毒查杀界面设计
与清理缓存界面类似,此处使用一个listView控件显示搜索的列表,同时用一个Button按钮一键清理功能。
图5-15病毒查杀界面
9 高级功能界面设计
此处包含了软件中的其它功能,有归属地、常见号码、程序加密功能。使用了一个ListView控件显示,经过触摸不同的位置即可打开相应的功能。如图5-16所示:
图5-16高级功能界面
10 设置功能界面设计
缓存清理界面的UI和软件管理界面的UI大致类似,其顶部显示的内容也是经过Textview显示出来的,经过ActivityManager拿到手机正在运行的进程数量和可用内存(ram)的大小,再设置显示到界面上。其主要界面展示如图5-17所示:
图5-17设置界面
六 调试与测试
1、在程序运行后,发现有些权限并不能得到
解决方案:经过资料翻阅,发现现在的安卓系统版本升级后,到了6.0及以上版本后,有了特殊的一些权限,搜集如下:group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.CAMERA
permission:android.permission.CAMERA
group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCAST
这些权限需要在程序运行过程中动态申请,否则将无法使用相应的功能。详解见:
七 心得体会
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。该平台由操作系统、中间件和应用软件组成,是第一个能够完全定制、免费、开放的手机平台。Android是一个免费的手机平台。 (资料来源:百度百科)
此次经过做Android手机卫士的开发实验项目,自己做交互式界面,服务器搭建,数据库设置,完成App主要逻辑,修改自定义对话框,优化界面,获取手机联系人,设置加密等内容,加深了对上课所学知识的理解。 完成这个项目之后,以前觉得复杂的布局文件,现在变得简单易懂。从之前面对一个项目的无从下手,到现在一步步的分析项目。 实践检验问题,在做项目过程中,尽管遇到了很多问题,可是经过同学们和自己查询的一些资料,一点点理清程序逻辑代码,修正错误。提高了自己对编程的兴趣,同时也加深了对所学知识的理解。
八 程序清单
以下是部分程序源码:
1. main.xml
主界面设计源码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#FFFFFF">
<View
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@drawable/logo"/>
<View
android:layout_width="fill_parent"
android:layout_height="1dip"
android:layout_marginTop="5dip"
android:background="@drawable/devide_line"/>
<GridView
android:listSelector="@android:color/transparent"
android:id="@+id/gv_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:numColumns="3"
android:layout_marginTop="5dip">
</GridView>
</LinearLayout>
主界面逻辑设计源码
package com.guoshisp.mobilesafe;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import com.guoshisp.mobilesafe.adapter.MainAdapter;
import android.view.*;
public class MainActivity extends Activity {
//显示主界面中的九大模块的GridView
private GridView gv_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//取消标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
gv_main = (GridView) findViewById(R.id.gv_main);
//为gv_main对象设置一个适配器,该适配器的作用是用于为每个item填充对应的数据
gv_main.setAdapter(new MainAdapter(this));
//为GridView对象中的item设置点击时的监听事件
gv_main.setOnItemClickListener(new OnItemClickListener() {
//参数一:item的父控件,也就是GridView 参数二:当前点击的item 参数三:当前点击的item在GridView中的位置
//参数四:id的值为点击了GridView的哪一项对应的数值,点击了GridView第9项,那id就等于8
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch (position) {
case 0: //手机防盗
//跳转到”手机防盗“对应的Activity界面
Intent lostprotectedIntent = new Intent(MainActivity.this,LostProtectedActivity.class);
startActivity(lostprotectedIntent);
break;
case 1: //骚扰拦截
Intent callSmsIntent = new Intent(MainActivity.this,CallSmsSafeActivity.class);
startActivity(callSmsIntent);
break;
case 2: //程序管理
Intent appManagerIntent = new Intent(MainActivity.this,AppManagerActivity.class);
startActivity(appManagerIntent);
case 3: //进程管理
Intent taskManagerIntent = new Intent(MainActivity.this,TaskManagerActivity.class);
startActivity(taskManagerIntent);
break;
case 4: //流量统计
Intent trafficInfoIntent = new Intent(MainActivity.this,TrafficInfoActivity.class);
startActivity(trafficInfoIntent);
break;
case 5: //病毒查杀
Intent antiVirusIntent = new Intent(MainActivity.this,AntiVirusActivity.class);
startActivity(antiVirusIntent);
break;
case 6: //清理缓存
Intent cleanCacheIntent = new Intent(MainActivity.this,CleanCacheActivity.class);
startActivity(cleanCacheIntent);
break;
case 7://高级工具
Intent atoolsIntent = new Intent(MainActivity.this,AtoolsActivity.class);
startActivity(atoolsIntent);
break;
case 8://设置
//跳转到”设置“对应的Activity界面
Intent settingIntent = new Intent(MainActivity.this,SettingCenterActivity.class);
startActivity(settingIntent);
break;
}
}
});
}
}
2. activity_splash.xml
启动界面设计源码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SplashActivity"
android:id="@+id/rl_splash"
android:background="@drawable/logo">
<TextView
android:id="@+id/tv_splash_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="版本号:"
android:textColor="#0aff00"
android:textSize="20sp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"/>
<ProgressBar
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="110dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
启动界面逻辑设计源码
package com.guoshisp.mobilesafe;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import .HttpURLConnection;
import .MalformedURLException;
import .ProtocolException;
import .URL;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import .Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.guoshisp.mobilesafe.domain.UpdateInfo;
import com.guoshisp.mobilesafe.engine.UpdateInfoParser;
import com.guoshisp.mobilesafe.utils.AssetCopyUtil;
import com.guoshisp.mobilesafe.utils.DownLoadUtil;
public class SplashActivity extends Activity {
private TextView tv_splash_version;
private UpdateInfo info;
private static final int GET_INFO_SUCCESS = 10;
private static final int SERVER_ERROR = 11;
private static final int SERVER_URL_ERROR = 12;
private static final int PROTOCOL_ERROR = 13;
private static final int IO_ERROR = 14;
private static final int XML_PARSE_ERROR = 15;
private static final int DOWNLOAD_SUCCESS = 16;
private static final int DOWNLOAD_ERROR = 17;
protected static fi
展开阅读全文