手机防盗系统的设计与实现.doc_第1页
手机防盗系统的设计与实现.doc_第2页
手机防盗系统的设计与实现.doc_第3页
手机防盗系统的设计与实现.doc_第4页
手机防盗系统的设计与实现.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安徽三联学院专 科 毕 业 论 文题目:手机防盗系统的设计与实现姓 名 专 业 班 级 指导教师 2012年 4月题目:手机防盗系统的设计与实现摘 要随着智能手机的发展其硬件发展也非常快,已经远远超出了传统通讯的需求。已经成为人们的个人信息处理终端。其中涉及很多个人隐私,因而手机的安全也是大家很关心的问题。关键词:传感器,智能手机目录:第一章 引言11.1开发背景11.2开发目标11.3项目意义11.4系统开发所需技术准备1第二章 系统分析62.1 系统需求分析62.2用户需求62.3系统业务分析62.4系统逻辑方案6第三章 系统设计63.1防盗系统功能需求简介63.2功能需求描述63.3系统目标要求63.4系统平台选择6第四章 系统实施64.1 UI设计64.2各子系统模块设计举例94.3软件测试21第五章 结束语3第一章 引言如今,智能手机已经稳稳地跻身于手机主流市场。根据权威市场研究机构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-Pass Filter。 Low-Pass Filter的封装方法如下面所述。从抽样数据中取得中间的值的方法.最近取得的加速度的值每个很少变化的方法 从抽样数据取得中间值的抽样代码如下。并且,抽样数为30来做的,根据封装的程序的用途和传感器的感度进行调整。API文档代码:import java.util.Arrays;import java.util.List;import android.app.Activity;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.widget.TextView;public class AndroidEggSensorGetValueActivity extends Activity implements SensorEventListener/* Called when the activity is first created. */private SensorManager sensorManager;private static final int ELEMENT_COUNT = 30;private float samplingX = new floatELEMENT_COUNT; /.private float samplingY = new floatELEMENT_COUNT;private float samplingZ = new floatELEMENT_COUNT;private int position;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE);setContentView(R.layout.main);Overrideprotected void onResume()super.onResume();List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);for (Sensor s : sensors)sensorManager.registerListener(this,s,SensorManager.SENSOR_DELAY_NORMAL); Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) / TODO Auto-generated method stubOverridepublic void onSensorChanged(SensorEvent e) if (position = ELEMENT_COUNT - 1) position =0;elseposition+;float x = e.valuessensorManager.DATA_X;float y = e.valuessensorManager.DATA_Y;float z = e.valuessensorManager.DATA_Z;samplingXposition = x;samplingYposition = y;samplingZposition = z;TextView textX = (TextView)findViewById(R.id.x);textX.setText(x: + String.valueOf(getMedian(samplingX);TextView textY = (TextView)findViewById(R.id.y);textY.setText(y: + String.valueOf(getMedian(samplingY);TextView textZ = (TextView)findViewById(R.id.z);textZ.setText(Z: + String.valueOf(getMedian(samplingZ); private float getMedian(float values) / TODO Auto-generated method stubfloat tmp = values.clone();Arrays.sort(tmp);int len = tmp.length;int first = 0;for (int i =0;ifirst =i;return tmp(len - first)/2 + first;Overrideprotected void onStop()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,因为后者已经在android API上显示过时了,那么我们就不介绍他了。(5)知道了有哪些感应器监听,那么我们就来介绍下如何给感应器加监听,这时又需要SensorManager,他就是感应器的保姆,很多关于感应器的部分都要靠他。SensorManager关于加监听的方法有几个:registerListenr(SensorListenerlistenr,int sensors,int rate):已过时registerListenr(SensorListenerlistenr,int sensors):已过时registerListenr(SensorEventListenerlistenr,Sensor sensors,int rate)registerListenr(SensorEventListenerlistenr,Sensor sensors,int rate,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,int sensors):已过时unregisterListener(SensorEventListenerlistener);unregisterListener(SensorEventListenerlistener,Sensor sensor);相应的参数作用,我相信大家也就知道了。(7)知道开和关,那么现在就来介绍具体的用!也就是关于SensorEventListener的实现,实现这个监听器必须实现两个方法:一个是onAccuracyChanged(Sensor sensor,intaccuracy),另一个是onSensorChanged(SensorEvent event)。第一个方法是反应速度变化的方法,也就是第五部分的rate变化时的方法.另一个是感应器的值变化的相应的方法。但是需要注意的是,这两个方法是响应的是一起,就是说当感应器发生变化,两个方法都会一起被调用。下面我介绍下:accuracy的值,也就是那四个常量相应的整数:SENSOR_DELAY_NORMAL:3SENSOR_DELAY_UI:2SENSOR_DELAY_GAME:1SENSOR_DELAY_FASTEST.:0现在介绍SensorEvent类:他有四个成员变量:Accuracy:精确值Sensor:发生变化的感应器Timestamp:发生的时间,单位是纳秒Values:发生变化后的值,这个是一个长度为3数组光线感应器只需要values0的值,其他两个都为0.而values0就是我们开发光线感应器所需要的,单位是:lux照度单位而android提供了8个不同情况下的:LIGHT_NO_MOON:晚上没月亮时的lux值=0.001LIGHT_FULLMOON:晚上满月时的lux值=0.25LIGHT_CLOUDY:多云天气下的lux值=100.0LIGHT_SUNRISE:黎明时的lux值=400.0LIGHT_OVERCAST:阴天的lux值=10000.0LIGHT_SHADE:阴影下的lux值=20000.0LIGHT_SUNLIGHT:阳光下的lux值=110000.0LIGHT_SUNLIGHT_MAX:阳光下的最大lux值=120000.0 1第二章 系统分析2.1 系统需求分析该系统需要一个平台,这里我选择的是目前最流行的android。也需要一个硬件基础。也就是说该系统必须运行在拥有加速度传感器和光线传感器的android手机之上。2.2用户需求简单实用的防盗方案。diy程度高,省电,可靠性好。2.3系统逻辑方案传感器实时获取数据,系统分析手机是否发生相对运动。判断是否是用户,是用户退出防盗,相反就启动防盗。第三章 系统设计3.1防盗系统功能需求简介 首先本系统需要有防盗基本的模块,同时还需要其他配套模块。人性化的设计是必须的。所以用户可以调整解锁方式、音量大小、防盗的安防等级。3.2系统平台选择目前android系统是最流行也是最开放的系统之一所以本系选择android系统。Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。2第四章 系统实施4.1 UI设计现在的好软件并不是功能好就能算上好软件。必须在拥有好的功能的同时还需要有很好的交互。古语说人靠衣装马靠鞍,软件的UI就如同人的脸一样。美观、大方、简约是设计关键词。我们在设计本系统的UI时充分考虑友好交互。让用户在使用本软件的时候有一种耳目一新的感觉。在素材的选择上。我们尽量以原创为主。在控件的设计上我们自己设计,自己用代码实现。如这样就可以避免使用平台提供的呆板的控件。让用户有新鲜感。4.2各子系统模块设计举例 防盗系统主模块package cdfs.c_alarm;import java.util.List;import com.wooboo.adlib_android.ImpressionAdView;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.app.Service;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.graphics.Rect;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.hardware.SensorManager;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Looper;import android.os.Vibrator;import android.telephony.TelephonyManager;import android.util.DisplayMetrics;import android.util.Log;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.widget.LinearLayout;import android.widget.LinearLayout.LayoutParams;public class alarm extends Activity implements SensorEventListenerView current;/记录当前Viewint xz2_x = 192;/地栏int xz1_y=-500;/菜单/GameView gv;/GameView对象Vibrator vibrator; ;/震动马达private SensorManagermSensorManager;/传感器管理器private boolean mRegisteredSensor;WelcomeView welcome;/欢迎界面boolean zhujiemian = true;/是否在主界面boolean sn = false;/室内模式启动标志位boolean sw =false;/室外模式启动标志位MediaPlayer ButtonMusic;/按键音效MediaPlayer AlarmMusic;/报警音效Rect shineimoshi;/室内模式的矩形框Rect huwaimoshi;/户外模式的矩形框Rect jiankong;/监控的矩形框Rect bangzhu; /帮助的矩形框Rect shezhi;/设置的矩形框Rect guanyu; /关于的矩形框Rect tuichu;/退出的矩形框Rect select_sound; /声音设置Rect seletc_wait_time; /报警延迟Rect select_lingming; /灵敏度设置Rect shoushi;/解锁手势int select_sound_x;int select_wait_time_x;int select_lingming_x;float x=0,y=0,z=0;/传感器值int waittime=0;/等待时间单位毫秒int wait_time;/报警延迟时间为10秒boolean alarm_music=false;/报警标志位int desktop_x=3;/界面绘图状态3监控界面;2设置界面;1关于界面; 4帮助界面;5退出;6解锁界面float light=0.01f;/屏幕亮度int t_x ;/获得点击处的X坐标int t_y ;/获得点击处的Y坐标int m_x ;/获得点击处的X坐标滑动int m_y ;/获得点击处的Y坐标滑动int touch_x_first,touch_y_first;/获取滑动屏幕的第一次触摸数据boolean touch_xy_first=true;/第一次获取控制boolean touch_xy_first2=true;boolean touch_xy_first3=true;int touch_x_last,touch_y_last;/获取屏幕滑动的最后一次数据boolean touch_s=false;/开始滑动解锁int jiesuo_x_first1,jiesuo_x_first2,jiesuo_y_first;/手势解锁锚点int sound_void;/音量int lmd;/灵敏度boolean csh;/初始化int System_sound_void;/记录系统媒体声音String imei ;boolean button_on_off=true;/按钮复位标志位 float light_n;/获取光线强度 boolean cgq_light=false;/传感器开启标志位 boolean cgq_xyz=false;/传感器开启标志位 int screen_h;/屏幕长度 int screenheight; int guanggao; / AdView adView; Dialog dialog; int fuwu=1;/服务类型1移动模式2为静止模式 Override public void onCreate(Bundle savedInstanceState) /重写 onCreate方法 super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);/静止屏幕休眠 requestWindowFeature(Window.FEATURE_NO_TITLE); /设置全屏 getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ); DisplayMetrics dm=new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); screenheight=dm.heightPixels;/获取屏幕长度 if(screenheight=800)screen_h=-54; welcome = new WelcomeView(this);/将屏幕切到欢迎界面 setContentView(welcome); current = welcome;readdata();if(csh=false)chushihua();/数据恢复初始化writedata(); initRects();/初始化用于匹配点击事件的矩形框 initSound();/声音 mRegisteredSensor = false;/取得SensorManager实例 mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); public void wooboo()if(guanggao=0)LinearLayout adlayout=new LinearLayout(this); ImpressionAdView.show(this, / Context44200708b0c04bd6b485c2ade827357d, / Wooboo_PIDadlayout, 0,700+screen_h, Color.WHITE,false, 30); public void zhengdong()vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); vibrator.vibrate(new long1000,100,10,1000,0); public void get_imei()TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);imei = tm.getDeviceId(); public void writedata() Editor sharedata = getSharedPreferences(data, 0).edit(); sharedata.putInt(wait_time,wait_time); sharedata.putInt(jiesuo_x_first1,jiesuo_x_first1); sharedata.putInt(jiesuo_x_first2,jiesuo_x_first2); sharedata.putInt(jiesuo_y_first,jiesuo_y_first); sharedata.putInt(sound_void,sound_void); sharedata.putInt(lmd,lmd); sharedata.putBoolean(csh,csh); mit(); / touch_xy_first=true; public void readdata() SharedPreferences sharedata = getSharedPreferences(data, 0); wait_time = sharedata.getInt(wait_time,0); jiesuo_x_first1 = sharedata.getInt(jiesuo_x_first1,0); jiesuo_x_first2 = sharedata.getInt(jiesuo_x_first2,0); jiesuo_y_first = sharedata.getInt(jiesuo_y_first,0); sound_void = sharedata.getInt(sound_void,0); lmd = sharedata.getInt(lmd,0); csh = sharedata.getBoolean(csh,false); /Log.v(cola,data=+data); select_sound_x=180+sound_void*2; select_wait_time_x=180+wait_time*2; select_lingming_x=(40-lmd)*5+180; / public void S_ervice()/Intent mService=new Intent(this,service.class);/启动服务/mService.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);/startService(mService);/Log.i(启动, 服务);/ public void chushihua()/数据初始化 jiesuo_x_first1=0; jiesuo_x_first2=480; jiesuo_y_first=400;/手势解锁锚点 sound_void=50;/音量 lmd=10;/灵敏度 wait_time=100;/报警延迟时间单位0.1S csh=true;/初始化标志位 public void change_light(float x)/修改亮度/只改变当前程序android屏幕亮度 /lp.screenBrightness 取值 0.0 - 1.0/设定值(float)的范围,默认小于0(系统设定)、0.0(暗)1.0(亮)/ 调用处理的地方,例如,Activity.onCreate()等等WindowManager.LayoutParams lp = getWindow().getAttributes();lp.screenBrightness = x;getWindow().setAttributes(lp); public void onStop() onResume();AudioManager mAM = (AudioManager) getSystemService(Context.AUDIO_SERVICE);int System_sound_void = mAM.getStreamMaxVolume(AudioManager.STREAM_MUSIC);mAM.setStreamVolume(AudioManager.STREAM_MUSIC, System_sound_void, 0);/恢复系统音量 int pid = android.os.Process.myPid(); /响应home按键后执行onStop方法而后kill本程序_终于搞定! android.os.Process.killProcess(pid);WindowManager.LayoutParams lp = getWindow().getAttributes();lp.screenBrightness = 1f;getWindow().setAttributes(lp);/String myIMEI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI); Overrideprotected void onDestroy() super.onDestroy();Overrideprotected void onResume()super.onResume();/接受SensorManager的一个列表(Listener)/这里我们指定类型为TYPE_ORIENTATION(方向感应器)List sensorslight = mSensorManager.getSensorList(Sensor.TYPE_PROXIMITY);/距离传感器List sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);if (sensors.size() 0)&(cgq_xyz)Sensor sensor = sensors.get(0);/注册SensorManager/this-接收sensor的实例/接收传感器类型的列表/接受的频率mRegisteredSensor = mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);if (sensorslight.size() 0)&(cgq_light)Sensor sensorlight = sensorslight.get(0);/注册SensorManager/this-接收sensor的实例/接收传感器类型的列表/接受的频率mRegisteredSensor = mSensorManager.registerListener(this, sensorlight, SensorManager.SENSOR_DELAY_FASTEST);Overrideprotected void onPause()if (mRegisteredSensor)/如果调用了registerListener/这里我们需要unregisterListener来卸载取消注册mSensorManager.unregisterListener(this);mRegisteredSensor = false;super.onPause(); /方法:初始化矩形框 public void initRects() shineimoshi=new Rect(0,370,480,545); /室内模式的矩形框 huwaimoshi=new Rect(0,200,480,375); /户外模式的矩形框 guanyu=new Rect(0,761+screen_h,96,854+screen_h); /关于的矩形框 shezhi=new Rect(96,761+screen_h,192,854+screen_h);/设置的矩形框 jiankong=new Rect(192,761+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论