《基于安卓手机卫士开发.doc》由会员分享,可在线阅读,更多相关《基于安卓手机卫士开发.doc(21页珍藏版)》请在三一办公上搜索。
1、专业课程设计设计报告学院:信息工程学院专业班级:软件102班学号:26号姓名:钟镁城指导老师:李伟完成时间:2013.6.20成 绩:目录手机安全卫士设计实现- 2 -一 系统功能- 2 -手机防盗- 2 -通讯卫士- 2 -手机杀毒- 2 -软件管理- 2 -任务管理- 3 -流量管理- 3 -系统优化- 3 -隐私空间- 3 -高级工具- 3 -安全资讯- 3 -限免推荐- 3 -设置中心- 4 -二 数据库设计- 4 -数据表及作用- 4 -具体设计- 5 -关键代码- 7 -三 系统实现- 8 -任务管理器部分功能实现代码- 8 -部分控件和事件说明- 17 -四 总结- 18 -手机
2、安全卫士设计实现一 系统功能 伴随智能手机的不断普及,移动互联网的快速发展,伴随着3G时代的到来,智能手机的广泛应用,手机安全问题被越发关注。 本次设计的手机安全卫士主要功能是保护手机的系统安全,有手机防盗、通信卫士、手机杀毒、软件管理、任务管理、流量管理、系统优化、隐私空间、高级工具、限免推荐、安全资讯、设置中心等功能。手机防盗 手机防盗主要实现对手机的保护。进入“手机防盗”模块,提示用户设置手机保护密码,设置密码成功或已经设置后进入保护程序,主要有以下几个功能:SIM卡变更警报、GPS追踪、远程销毁数据、远程锁屏。通讯卫士 通讯卫士主要实现对手机通讯录的备份,添加黑名单,防骚扰设置。手机杀
3、毒手机杀毒主要实现对恶意软件的扫描,通过调用数据库中恶意软件标识特征来识别本机是否含有恶意软件。如发现,则调用系统卸载工具卸载或者强行删除。软件管理 软件管理实现对软件的管理,包括系统软件和用户软件,包含软件的卸载程序,轻松卸载不需要的软件。任务管理 任务管理实现对系统内存中的进程进行动态监控,满足用户对无响应占资源的进程进行结束机制。但不允许用户结束系统进程。流量管理 流量管理实现对各进程访问网络数据量的监控,有wifi和3G/2G两种模式,用户可以设定3G/2G网络下流量使用最高限制,当接近最高值和达到最高值时,提醒用户。系统优化 系统优化实现优化系统,对系统开机项进行优化、系统垃圾清理。
4、隐私空间 隐私空间实现用户保存一些重要的文件,隐私照片、工作文档等都可以加密保存,访问这些文件需要独立密码。高级工具 高级工具实现一些日常需要的帮助,如手机号码归属地查询、归属地显示、短信备份、短信还原、短信锁定、常用电话号码。安全资讯 提供每日最新的热门资讯,主要以手机安全方面知识、信息为主,另外推送最新最热社会话题。限免推荐 限免推荐将最新最热的应用推荐给用户,支持链接下载,并保证下载的应用安全无毒。设置中心 设置中心实现用户对操作习惯性的设置,如界面颜色、升级服务、程序锁、退出等操作。二 数据库设计 本次设计的数据是通过SQLite存储的,系统数据和用户数据存储到SQLite中。SQLi
5、te是Android自带的一个标准的数据库,它支持SQL语句,是一个轻量级的嵌入式数据库。本次数据库设计工具是SQLite Expert Professional 3.4。数据表及作用 Antivirus:存储病毒、恶意软件特征码信息,在“手机杀毒”中应用。通过调用恶意软件特征码,准确识别恶意软件。 Address:存储本软件提供的基本信息,在功能调用、数据传递方面实现辅助作用。 Commonum:存储常用电话号码,在“高级工具”中提供用户查找常用的电话号码如肯德基服务电话、中国移动客服电话、道路交通查询电话等。部分数据表截图如图所示:图(1)图(2)图(3)具体设计 程序中的SQLiteDa
6、tabase实例代表了一个SQLite的数据库,通过SQLiteDatabase实例的方法,执行SQL语句,对数据库进行录入、读取、更新操作。 程序中的SQLiteOpenHelper是一个辅助类,主要生成一个数据库并对数据库进行管理。 数据库基本实现的三个函数:(1)onCreate:在数据库第一次生成的时候调用这个方法,数据录入时生成数据表。(2)onUpgrade:数据库更新时调用这个方法。(3)onOpen:读取数据库文件时,通过这个方法进行读取数据库文件。以commonnum为例:CREATE TABLE android_metadata (locale TEXT);CREATE T
7、ABLE classlist (name text NOT NULL, idx integer NOT NULL);CREATE TABLE ctentvertify (vertify text NOT NULL);CREATE TABLE table1 ( _id integer PRIMARY KEY autoincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table1_num on table1(number);CREATE TABLE table2 ( _id integer PRIMARY K
8、EY autoincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table2_num on table2(number);CREATE TABLE table3 ( _id integer PRIMARY KEY autoincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table3_num on table3(number);CREATE TABLE table4 ( _id integer PRIMARY KEY
9、 autoincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table4_num on table4(number);CREATE TABLE table5 ( _id integer PRIMARY KEY autoincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table5_num on table5(number);CREATE TABLE table6 ( _id integer PRIMARY KEY a
10、utoincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table6_num on table6(number);CREATE TABLE table7 ( _id integer PRIMARY KEY autoincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table7_num on table7(number);CREATE TABLE table8 ( _id integer PRIMARY KEY aut
11、oincrement, number text NOT NULL, name text NOT NULL);CREATE INDEX idx_table8_num on table8(number);CREATE TABLE version (major integer, minor integer, build integer, subcnt integer);说明:commonnum表主要实现存储服务类电话信息,方便用户及时查找所需要的电话号码,主键是PRIMARY KEY,外键为ID,数据类型为长整形,不允许为空。关键代码package cn.itcast.mobilesafe.db;i
12、mport android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class AppLockDBHelper extends SQLiteOpenHelperpublic AppLockDBHelper(Context context) super(context, applock.db, null, 1);创建数据库:Overridepublic void onCreate(SQLiteDataba
13、se db) db.execSQL(CREATE TABLE applock (_id integer primary key autoincrement, packname varchar(30);更新数据库的操作:Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 三 系统实现 本次设计的手机安全卫士取名为“强势安全中心”,开始界面如图(4),主界面界面如图(5)。图(4) 图(5)任务管理器部分功能实现代码任务管理器部分代码public class MainActivity ex
14、tends Activity implements OnItemClickListener private static final String TAG = MainActivity;private GridView gv_main;private MainUIAdapter adapter;/ 用来持久化一些配置信息private SharedPreferences sp;Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R
15、.layout.mainscreen);sp = this.getSharedPreferences(config, Context.MODE_PRIVATE);gv_main = (GridView) this.findViewById(R.id.gv_main);adapter = new MainUIAdapter(this);gv_main.setAdapter(adapter);gv_main.setOnItemClickListener(this);gv_main.setOnItemLongClickListener(new OnItemLongClickListener() pu
16、blic boolean onItemLongClick(AdapterView parent,final View view, int position, long id) if (position = 0) AlertDialog.Builder buider = new Builder(MainActivity.this);buider.setTitle(设置);buider.setMessage(请输入要更改的名称);final EditText et = new EditText(MainActivity.this);et.setHint(请输入文本);buider.setView(
17、et);buider.setPositiveButton(确定, new OnClickListener() public void onClick(DialogInterface dialog, int which) String name = et.getText().toString().trim();if (.equals(name) Toast.makeText(getApplicationContext(),内容不能为空, 0).show();return; else Editor editor = sp.edit();editor.putString(lost_name, nam
18、e);/ 完成数据的提交mit();TextView tv = (TextView) view.findViewById(R.id.tv_main_name);tv.setText(name););buider.setNegativeButton(取消, new OnClickListener() public void onClick(DialogInterface dialog, int which) );buider.create().show();return false;);/* * 当gridview的条目被点击的时候 对应的回调 parent :girdview view : 当
19、前被点击的条目 Linearlayout * position : 点击条目对应的位置 id : 代表的行号 */public void onItemClick(AdapterView parent, View view, int position,long id) Log.i(TAG, 点击的位置 + position);switch (position) case 0: / 手机防盗Log.i(TAG, 进入手机防盗);Intent lostIntent = new Intent(MainActivity.this,LostProtectedActivity.class);startAct
20、ivity(lostIntent);break;case 1: / 通讯卫士Log.i(TAG, 进入通讯防盗);Intent callsmsIntent = new Intent(MainActivity.this,CallSmsActivity.class);startActivity(callsmsIntent);break;case 2:/ 病毒查杀Intent BingduIntent = new Intent(MainActivity.this,BingduActivity.class);startActivity(BingduIntent);break;case 3: / 程序管
21、理Intent appmanagerIntent = new Intent(MainActivity.this,AppManagerActivity.class);startActivity(appmanagerIntent);break;case 4:/ 任务管理Intent taskmanagerIntent = new Intent(MainActivity.this,TaskManagerActivity.class);startActivity(taskmanagerIntent);break;case 5:/ 流量管理Intent trafficmanagerIntent = ne
22、w Intent(MainActivity.this,TrafficManagerActivity.class);startActivity(trafficmanagerIntent);break;case 7: / 隐私空间Intent privacy= new Intent(MainActivity.this,privacy.class);startActivity(privacy);break;case 8: / 高级工具Log.i(TAG, 进入高级工具);Intent atoolsIntent = new Intent(MainActivity.this,AtoolsActivity
23、.class);startActivity(atoolsIntent);break;case 9: / 安全资讯Intent InformationActivity= new Intent(MainActivity.this,InformationActivity.class);startActivity(InformationActivity);break;case 10: / 限免推荐Intent LimitfreeActivity = new Intent(MainActivity.this,LimitfreeActivity.class);startActivity(Limitfree
24、Activity);break;case 11: / 设置中心Intent settingcenterIntent = new Intent(MainActivity.this,SettingCenterActivity.class);startActivity(settingcenterIntent);break;private long totalused = 0;private Handler handler = new Handler() Overridepublic void handleMessage(Message msg) / TODO Auto-generated metho
25、d stubsuper.handleMessage(msg);ll_task_manager_loading.setVisibility(View.INVISIBLE);long totalmemoryinfo = totalused * 1024 + getAvailMemoryInfo();String strtotalmemory = TextFormater.getDataSize(totalmemoryinfo);String text = tv_avail_memory.getText().toString() + 总内存:+ strtotalmemory;tv_avail_mem
26、ory.setText(text);adapter = new TaskInfoAdapter();lv_task_manager.setAdapter(adapter);private void fillData() setTitleData();ll_task_manager_loading.setVisibility(View.VISIBLE);new Thread() Overridepublic void run() taskInfoprovider = new TaskInfoProvider(TaskManagerActivity.this);listtaskinfos = ta
27、skInfoprovider.getAllTasks(runingappinfos);totalused = 0;for (TaskInfo taskinfo : listtaskinfos) totalused += taskinfo.getMemorysize();handler.sendEmptyMessage(0);.start();/* * 设置title的数据 */private void setTitleData() tv_task_count.setText(进程数目: + getProcessCount();tv_avail_memory.setText(剩余内存+ Text
28、Formater.getDataSize(getAvailMemoryInfo();private int getProcessCount() runingappinfos = am.getRunningAppProcesses();return runingappinfos.size();private long getAvailMemoryInfo() MemoryInfo outInfo = new ActivityManager.MemoryInfo();am.getMemoryInfo(outInfo);return outInfo.availMem;public int getCo
29、unt() SharedPreferences sp = getSharedPreferences(config,Context.MODE_PRIVATE);boolean showsystemapp = sp.getBoolean(showsystemapp, false);if (showsystemapp) return listtaskinfos.size() + 2;elsereturn usertaskinfos.size() + 1;public void appSetting(View view) Intent intent = new Intent(this,TaskSett
30、ingActivity.class);startActivityForResult(intent, 0);public void killTask(View view) int total = 0;int memorysize = 0;private int getProcessCount() runingappinfos = am.getRunningAppProcesses();return runingappinfos.size();for (TaskInfo taskinfo : usertaskinfos) if (taskinfo.isIschecked() memorysize
31、+= taskinfo.getMemorysize();am.killBackgroundProcesses(taskinfo.getPackname();/ listtaskinfos.remove(taskinfo);total+;String size = TextFormater.getKBDataSize(memorysize);/ Toast.makeText(this, 结束了+total+个进程,释放了+size+空间, 0).show();MyToast.showToast(this, R.drawable.notification, 杀死了 + total+ 个进程,释放了
32、 + size + 空间);/ 通知ui更新/ adapter = new TaskInfoAdapter();/ lv_task_manager.setAdapter(adapter);fillData();static class ViewHolder public ImageView iv;public TextView tv_name;public TextView tv_memory_size;public CheckBox cb_task_checked;Overrideprotected void onActivityResult(int requestCode, int res
33、ultCode, Intent data) / TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if(requestCode=200)fillData();运行效果如图(6):图(6) 程序清单: * TaskInfo taskinfo = listtaskinfos.get(position); * View.inflate(TaskManagerActivity.this, * R.layout.task_manager_item, null); ViewHolder
34、holder = new * ViewHolder(); holder.iv = (ImageView) * view.findViewById(R.id.iv_app_icon); holder.tv_name = (TextView) * view.findViewById(R.id.tv_app_name); holder.tv_memory_size = * (TextView) view.findViewById(R.id.tv_app_memory_size); * holder.cb_task_checked = (CheckBox) * view.findViewById(R.
35、id.cb_task_checked); * holder.iv.setImageDrawable(taskinfo.getAppicon(); * holder.tv_name.setText(程序名称 +taskinfo.getAppname(); * holder.tv_memory_size * .setText(内存占用: +TextFormater.getKBDataSize( * taskinfo.getMemorysize(); * holder.cb_task_checked.setChecked(taskinfo.isIschecked(); return * view;部
36、分控件和事件说明 (1) super.setContentView(R.layout.main);调用布局管理器。MainUIAdapter(Context context):界面布局,public MainUIAdapter(Context context) this.context = context;inflater = LayoutInflater.from(context);sp = context.getSharedPreferences(config, Context.MODE_PRIVATE);private static String names = 手机防盗, 通讯卫士,
37、手机杀毒,软件管理, 任务管理, 流量管理,系统优化, 隐私空间,高级工具,安全资讯,限免推荐, 设置中心 ;private static int icons = R.drawable.widget09, R.drawable.widget02,R.drawable.widget04,R.drawable.widget01, R.drawable.widget07,R.drawable.widget05,R.drawable.widget06,R.drawable.widget10,R.drawable.widget03, R.drawable.widget12,R.drawable.widg
38、et11,R.drawable.widget08;(2) this.img = (ImageView) super.findViewById(R.id.img) ;获取组件,此为图形图像组件。(3) public byte getData() throws Exception 取得数据。ByteArrayOutputStream bos = null ;内存输出流。bos = new ByteArrayOutputStream() ;定义内存输出流。(4) girdview view:当gridview的条目被点击的时候 对应的回调 parent ,当前被点击的条目 Linearlayout。
39、position : 点击条目对应的位置 id : 代表的行号。(5) public AppInfoProvider(Context context):返回当前手机里面安装的所有的程序信息的集合。(6) startActivity(intent);设置activity切换时候的动画效果。(7) private void showFirstEntryDialog():检查是否有密码的设置。(8) public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)数据库更新操作。(9) MyLoactionListene
40、r implements LocationListener:手机位置发生改变的时候调用的方法。(10) onLocationChanged(Location location):状态发生改变的时候 调用 可用不可用,不可用可用。(11) AppManagerAdapter(List appinfos, Context context):配置适配器数据。(12) View convertView (转化view对象 ,历史view对象的缓存) convertview 就是拖动的时候被回收掉的view对象。四 总结本次设计的手机安全卫士主要功能是保护手机的系统安全,有手机防盗、通信卫士、手机杀毒、
41、软件管理、任务管理、流量管理、系统优化、隐私空间、高级工具、限免推荐、安全资讯、设置中心等功能。总体实现了预定功能,优化了服务状态,增加了便捷功能,如常用电话,自定义黑白名单,备份用户数据,增加了个人隐私空间,通过隐私空间用户可以把重要的资料诸如相片、文档、密码本备份到隐私空间,使得用户有一个便捷的体验。存在不足主要有这些,限免推荐这个模块还没有真正实现,主要原因是还没有找到合适的应用推荐接口,即应用的推荐源,这个将在以后的开发中实际落实;安全资讯模块仅仅是一个框架,还没有正式推出,这将在以后的开发中添加,将实现对重要信息进行推送,方便用户及时了解手机安全动态;设置中心还需添加组件实现对程序本身应用的设置。总体来说这次课程设计比一个学期学的东西还多,这充分体现了实践在学习的重要性,今后的学习过程中加大对动手能力的投入,同时对这几周做的程序进一步优化,并作为将来毕业设计的选题之一。附:源代码下载地址配置好android环境后导入eclipse猛击运行