手机防盗系统的设计与实现.docx
《手机防盗系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《手机防盗系统的设计与实现.docx(32页珍藏版)》请在冰豆网上搜索。
手机防盗系统的设计与实现
安徽三联学院
专科毕业论文
题目:
手机防盗系统的设计与实现
姓名
专业
班级
指导教师
2012年4月
题目:
手机防盗系统的设计与实现
摘要
随着智能手机的发展其硬件发展也非常快,已经远远超出了传统通讯的需求。
已经成为人们的个人信息处理终端。
其中涉及很多个人隐私,因而手机的安全也是大家很关心的问题。
关键词:
传感器,智能手机
目录:
第一章引言······················································1
1.1开发背景···············································1
1.2开发目标···············································1
1.3项目意义···············································1
1.4系统开发所需技术准备···································1
第二章系统分析··················································6
2.1系统需求分析··········································6
2.2用户需求················································6
2.3系统业务分析············································6
2.4系统逻辑方案············································6
第三章系统设计··················································6
3.1防盗系统功能需求简介··································6
3.2功能需求描述……………………………………………………6
3.3系统目标要求……………………………………………………6
3.4系统平台选择……………………………………………………6
第四章系统实施··················································6
4.1UI设计·················································6
4.2各子系统模块设计举例…………………………………………9
4.3软件测试…………………………………………………………21
第五章结束语………………………………………………………
第一章引言
如今,智能手机已经稳稳地跻身于手机主流市场。
根据权威市场研究机构IDC于去年年底公布报告中的数据,全球2004年第一季度移动电话出货量在智能手机的带动下,比去年同期增长了29.3%,达到1.527亿部,其中智能手机出货量比上年同期激增85.8%。
同时来自国内的报告显示,2004年第一季度,中国智能手机市场销售总量达到65.5万部,销售总额达到19.4亿元,与2003年同期相比销量上升195.05%。
这两份报告的数据同时显示,目前智能手机市场正处于一个高速发展的时期。
1.1开发背景
随着科技的发展手机从最原始的单一的通话功能发展到目前的智能平台,方便了人们的生活。
但是大家最头疼的也就是手机的丢失。
但是目前很多智能手机都拥有很多传感器。
例如光线,加速度等传感器。
利用这些我们就能很好的解决这个问题。
1.2开发目标
利用智能手机自身来解决防盗问题。
1.3项目意义
在不增加任何其他成本之下的高效简单的防盗方案。
1.4系统开发所需技术准备
传感器编程,平台API。
加速度传感器:
加速度传感器
加速度传感器是为了检测物体的加速度的传感器。
物体运动加速度也跟着变化,如果能取到加速度,物体受到什么样的作用力或则物体进行什么样的运动,我们就可以知道。
使用加速度,我们就能做模拟计步器、物体运动的应用程序。
通过加速度传感器能取到的值,我们可以通过Android的加速度传感器可以取得x,y,z三个轴的加速度。
加速度值受地球重力的影响值也不一样。
在SensorManager类中定义了很多星体的重力加速度值。
SensorManager类被定义的各新星体的重力加速度值
通常,从加速度传感器取得的值,拿手机手机设备的人的手震动或则放在摇晃的场所的时候,受震动影响设备的值增幅变化是存在的。
手的摇动、轻微震动的影响是属于长波形式,去掉这种长波干扰的影响,可以取得高精度的值。
去掉这种长波这种过滤机能叫Low-PassFilter。
Low-PassFilter的封装方法如下面所述。
从抽样数据中取得中间的值的方法.最近取得的加速度的值每个很少变化的方法
从抽样数据取得中间值的抽样代码如下。
并且,抽样数为30来做的,根据封装的程序的用途和传感器的感度进行调整。
API文档代码:
importjava.util.Arrays;
importjava.util.List;
importandroid.app.Activity;
importandroid.hardware.Sensor;
importandroid.hardware.SensorEvent;
importandroid.hardware.SensorEventListener;
importandroid.hardware.SensorManager;
importandroid.os.Bundle;
importandroid.widget.TextView;
publicclassAndroidEggSensorGetValueActivityextendsActivityimplementsSensorEventListener{
/**Calledwhentheactivityisfirstcreated.*/
privateSensorManagersensorManager;
privatestaticfinalintELEMENT_COUNT=30;
privatefloat[]samplingX=newfloat[ELEMENT_COUNT];//..................①
privatefloat[]samplingY=newfloat[ELEMENT_COUNT];
privatefloat[]samplingZ=newfloat[ELEMENT_COUNT];
privateintposition;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
sensorManager=(SensorManager)this.getSystemService(SENSOR_SERVICE);
setContentView(R.layout.main);
}
@Override
protectedvoidonResume(){
super.onResume();
Listsensors=sensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensors:
sensors){
sensorManager.registerListener(this,s,SensorManager.SENSOR_DELAY_NORMAL);
}
}
@Override
publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidonSensorChanged(SensorEvente){
if(position==ELEMENT_COUNT-1){
position=0;
}else{
position++;
}
floatx=e.values[sensorManager.DATA_X];
floaty=e.values[sensorManager.DATA_Y];
floatz=e.values[sensorManager.DATA_Z];
samplingX[position]=x;
samplingY[position]=y;
samplingZ[position]=z;
TextViewtextX=(TextView)findViewById(R.id.x);
textX.setText("x:
"+String.valueOf(getMedian(samplingX)));
TextViewtextY=(TextView)findViewById(R.id.y);
textY.setText("y:
"+String.valueOf(getMedian(samplingY)));
TextViewtextZ=(TextView)findViewById(R.id.z);
textZ.setText("Z:
"+String.valueOf(getMedian(samplingZ)));
}
privatefloatgetMedian(float[]values){
//TODOAuto-generatedmethodstub
float[]tmp=values.clone();
Arrays.sort(tmp);
intlen=tmp.length;
intfirst=0;
for(inti=0;i
first=i;
}
returntmp[(len-first)/2+first];
}
@Override
protectedvoidonStop(){
super.onStop();
sensorManager.unregisterListener(this);
}
}
光线传感器:
光线感应器就是可以感应光线强度的一个设备,而我们对他的开发一般是通过感应光线强度的变化。
首先android通过一个SensorManager来管理各种感应器,而获得这个管理器的引用必须通过(SensorManager)getSystemService(Context.SENSOR_SERVICE);这句代码来获得。
(3)
在android系统中所有的感应器都属于Sensor类的一个实例,并没有继续细分下去,通过这次的主题,你也会发现android对于感应器的处理几乎是一摸一样的。
既然都是Sensor类,那么怎么获得相应的感应器呢?
这时就需要通过SensorManager来获得,我们通过这句代码来确定我们要获得感应器类型.
sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
很显然我获得的是光线感应器的引用.
(4)
既然已经获得相应的感应器的引用,那么我们的怎么用呢?
在第一部分我就说到了我们通过感应光线强度的变化,注意是‘变化’。
有些人获取已经明白了,既然是变化,我们肯定需要通过监听他,来获得变化。
因为我们就需要给我们的感应器加个监听,android提供了两个监听一个是SensorEventListener,另一个SensorListener,因为后者已经在androidAPI上显示过时了,那么我们就不介绍他了。
(5)
知道了有哪些感应器监听,那么我们就来介绍下如何给感应器加监听,这时又需要SensorManager,他就是感应器的保姆,很多关于感应器的部分都要靠他。
SensorManager关于加监听的方法有几个:
registerListenr(SensorListener
listenr,intsensors,intrate):
已过时
registerListenr(SensorListener
listenr,intsensors):
已过时
registerListenr(SensorEventListener
listenr,Sensorsensors,intrate)
registerListenr(SensorEventListener
listenr,Sensorsensors,intrate,Handlerhandler)
因为SensorListener已经过时,那么相应的注册方法,也就过时了。
说下各个参数的意义:
Listener:
相应监听器的引用
Sensor:
相应的感应器引用
Rate:
感应器的反应速度,这个必须是系统提供4个常量之一的:
SENSOR_DELAY_NORMAL:
匹配屏幕方向的变化
SENSOR_DELAY_UI:
匹配用户接口
SENSOR_DELAY_GAME:
匹配游戏
SENSOR_DELAY_FASTEST.:
匹配所能达到的最快
Handler:
(6)
要注意的是在android中注册了感应器,也就启用了他,而使用感应器是相当耗电的,这些是为什么感应器的应用没有那么泛滥的主要原因,所以我们必须在我们不需要他的时候,关掉他。
怎么关闭呢?
注册是启用,那么注销就是关闭了。
Android有以下一些注销方法:
unregisterListener(SensorListenerlistener):
已过时
unregisterListener(SensorListenerlistener,intsensors):
已过时
unregisterListener(SensorEventListenerlistener);
unregisterListener(SensorEventListenerlistener,Sensorsensor);
相应的参数作用,我相信大家也就知道了。
(7)
知道开和关,那么现在就来介绍具体的用!
也就是关于SensorEventListener的实现,实现这个监听器必须实现两个方法:
一个是onAccuracyChanged(Sensorsensor, int accuracy),另一个是onSensorChanged(SensorEventevent)。
第一个方法是反应速度变化的方法,也就是第五部分的rate变化时的方法.另一个是感应器的值变化的相应的方法。
但是需要注意的是,这两个方法是响应的是一起,就是说当感应器发生变化,两个方法都会一起被调用。
下面我介绍下:
accuracy的值,也就是那四个常量相应的整数:
SENSOR_DELAY_NORMAL:
3
SENSOR_DELAY_UI:
2
SENSOR_DELAY_GAME:
1
SENSOR_DELAY_FASTEST.:
0
现在介绍SensorEvent类:
他有四个成员变量:
Accuracy:
精确值
Sensor:
发生变化的感应器
Timestamp:
发生的时间,单位是纳秒
Values:
发生变化后的值,这个是一个长度为3数组
光线感应器只需要values[0]的值,其他两个都为0.
而values[0]就是我们开发光线感应器所需要的,单位是:
lux照度单位
而android提供了8个不同情况下的:
LIGHT_NO_MOON:
晚上没月亮时的lux值==0.001
LIGHT_FULLMOON:
晚上满月时的lux值==0.25
LIGHT_CLOUDY:
多云天气下的lux值==100.0
LIGHT_SUNRISE:
黎明时的lux值==400.0
LIGHT_OVERCAST:
阴天的lux值==10000.0
LIGHT_SHADE:
阴影下的lux值==20000.0
LIGHT_SUNLIGHT:
阳光下的lux值==110000.0
LIGHT_SUNLIGHT_MAX:
阳光下的最大lux值==120000.0[1]
第二章系统分析
2.1系统需求分析
该系统需要一个平台,这里我选择的是目前最流行的android。
也需要一个硬件基础。
也就是说该系统必须运行在拥有加速度传感器和光线传感器的android手机之上。
2.2用户需求
简单实用的防盗方案。
diy程度高,省电,可靠性好。
2.3系统逻辑方案
传感器实时获取数据,系统分析手机是否发生相对运动。
判断是否是用户,是用户退出防盗,相反就启动防盗。
第三章系统设计
3.1防盗系统功能需求简介
首先本系统需要有防盗基本的模块,同时还需要其他配套模块。
人性化的设计是必须的。
所以用户可以调整解锁方式、音量大小、防盗的安防等级。
3.2系统平台选择
目前android系统是最流行也是最开放的系统之一所以本系选择android系统。
Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。
Android操作系统最初由AndyRubin开发,最初主要支持手机。
2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。
Android的主要竞争对手是苹果公司的iOS以及RIM的BlackberryOS。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。
[2]
第四章系统实施
4.1UI设计
现在的好软件并不是功能好就能算上好软件。
必须在拥有好的功能的同时还需要有很好的交互。
古语说人靠衣装马靠鞍,软件的UI就如同人的脸一样。
美观、大方、简约是设计关键词。
我们在设计本系统的UI时充分考虑友好交互。
让用户在使用本软件的时候有一种耳目一新的感觉。
在素材的选择上。
我们尽量以原创为主。
在控件的设计上我们自己设计,自己用代码实现。
如
这样就可以避免使用平台提供的呆板的控件。
让用户有新鲜感。
4.2各子系统模块设计举例
防盗系统主模块
packagecdfs.c_alarm;
importjava.util.List;
importcom.wooboo.adlib_android.ImpressionAdView;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.app.Dialog;
importandroid.app.Service;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.graphics.Color;
importandroid.graphics.Rect;
importandroid.hardware.Sensor;
importandroid.hardware.SensorEvent;
importandroid.hardware.SensorEventListener;
importandroid.content.SharedPreferences;
importandroid.content.SharedPreferences.Editor;
importandroid.hardware.SensorManager;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.os.Bundle;
importandroid.os.Looper;
importandroid.os.Vibrator;
importandroid.telephony.TelephonyManager;
importandroid.util.DisplayMetrics;
importandroid.util.Log;
importandroid.view.KeyEvent;
importandroid.view.LayoutInflater;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.LinearLayout;
importandroid.widget.LinearLayout.LayoutParams;
publicclassalarmextendsActivityimplementsSensorEventListener{
Viewcurrent;//记录当前View
intxz2_x=192;//地栏
intxz1_y=-500;//菜单
//GameViewgv;//GameView对象
Vibratorvibrator;;//震动马达
privateSensorManagermSensorManager;//传感器管理器
privatebooleanmRegisteredSensor;
WelcomeViewwelcome;//欢迎界面
booleanzhujiemian=true;//是否在主界面
booleansn=false;//室内模式启动标志位
booleansw=false;//室外模式启动标志位
MediaPlayerButtonMusic;//按键音效
MediaPlayerAlarmMusic;//报警音效
Rectshineimoshi;//室内模式的矩形框
Recthuwaimoshi;//户外模式的矩形框
Rectjiankong;//监控的矩形框
Rectbangzhu;//帮助的矩形框
Rectshezhi;//设置的矩形框
Rectguanyu;//关于的矩形框
Recttuichu;//退出的矩形框
Rectselect_sound;//声音设置
Rectseletc_wait_time;//报警延迟
Rectselect_lingming;//灵敏度设置
Rectshoushi;//解锁手势
intselect_sound_x;
intselect_wait_time_x;
intsele