基于Android平台的无间盗防盗软件地图追踪及远程指令毕业设计文档格式.docx
《基于Android平台的无间盗防盗软件地图追踪及远程指令毕业设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于Android平台的无间盗防盗软件地图追踪及远程指令毕业设计文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
LBS将更加实用化,所衍生出的服务和产业链将更加丰富和广阔,为用户提供随时随身的服务。
1.2.课题的目的及其意义
基于地图位置服务发展迅速,对人机界面与地理信息系统服务整合具有重要的理论和现实意义。
本课题在此基础上利用Androidd的短信通信机制、广播机制以及第三方地图软件提供商的API,实现并研究手机防盗在移动技术上的新应用。
将手机防盗技术应用于日常生活之中,对降低手机及其资料被盗的风险和减少个人的财产损失有着重大意义和应用价值。
通过此课题,能够培养学生动手能力,增强个人思维模式,锻炼软件开发中遇到问题的调试能力,进而加强专业技术。
1.3.本文的主要研究工作
本文主要研究的是基于Android系统短信通知机制的远程追踪控制指令,以及第三方地图API的使用,通过两者的配合和应用来巩固手机防盗的防线。
2.
AndroidXX地图API
2.1.手机地图服务
手机地图服务是指在手机上利用GPS或者网络实现精确定位,通过使用WAP方式或客户端方式,得到相关位置信息的业务。
为用户提供了一种便捷实用的掌上地图,通过手机屏幕,用户可以查询城市信息、查找自己的位置、查找道路信息。
它以矢量地图、卫星地图、混合地图3种服务模式向全球提供地图搜索和逐级缩放功能的地图服务,让全球用户体验到了新的地图服务模式。
目前,主流的地图服务在国外有GoogleMaps,Yahoo地图服务,VirtualEarth服务三大服务,而国内则有搜狐旗下的搜狗、XX、高德等主要的地图服务。
本软件之所以选用XX地图服务是因为其功能与国外地图相比更具本地特色,也更加实用,其位置相对与国内而言也更为精准。
2.2.定位技术
移动终端的定位是通过检测移动终端和基站之间传播信号的特征参数来获得其几何位置,在显示应用中,主要有三种常用的定位方式:
2.2.1.基于GSM蜂窝基站定位
把移动电话的服务区别分为一个个正六边形的子区,每个小区设一个基站。
形成了形状酷似“蜂窝”的结构[1],移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(TimeofArrival,到达时刻)或TDOA(TimeDifferenceofArrivalm,到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,就能够计算出移动电话的位置。
实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。
一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。
2.2.2.基于GPS卫星定位
GPS的空间部分是由24颗卫星组成(其中有21颗工作卫星,3颗备用卫星)。
在空旷地带且无阻挡的前提下,GPS定位技术的定位精度可达15米左右。
但是,在很多情况下,GPS接收机不能够捕获足够多的GPS卫星信号,定位精度将会大大的降低,甚至不能定位(如室内)。
GPS系统主要由三大部分组成:
GPS卫星星座(空间部分)、地面监控系统(控制部分)和GPS信号接收机(用户部分)。
GPS的定位原理就是根据高速运动的卫星瞬间位置作为已知的数据,采用空间距离后方交会的方法,确定待测点的位置[2]。
我们通常所说的GPS往往仅只用户设备部分,它通过接受天空不同位置的三颗以上的卫星信号,手机捕获到跟踪的卫星信号后,配合地面接收天线就可按定位解算方法进行定位计算,计算出用户所在地理位置的经纬度、高度、速度、时间等信息。
简单来说是利用了数学上三条线确定一个空间点的原理。
虽然GPS定位最为精准,但其缺点是耗电、定位慢并且无法室内定位。
2.2.3.基于WIFI热点定位
基于WIFI热点定位的原理跟GSM基站定位的原理差不多,前提是我们必须拿到WIFI路由器的SSID和信号强度。
当然,我们并不需要真正连接上指定的WIFI路由器,只需要探测到有WIFI存在即可。
定位端只要侦听一下附近都有哪些热点,检测一下每个热点的信号强弱,然后把这些信息发送给Skyhook的服务器。
服务器根据这些信息,查询每个热点在数据库里记录的坐标,进行运算,就能知道客户端的具体位置了,再把坐标告诉客户端。
可以想想,只要收到的AP信号越多,定位就会越准。
2.3.XX地图API简介
XX地图移动版API(Android)是一套基于Android1.5及以上设备的应用程序接口,通过该接口,您可以轻松访问XX服务和数据,构建功能丰富、交互性强的地图应用程序[3]。
XX地图移动版API不仅包含构建地图的基本接口,还提供了诸如地图定位、本地搜索、路线规划等数据服务,你可以根据自己的需要进行选择。
XX地图API将复杂的底层逻辑进行封装,以一种便于开发者理解的方式提供。
开发者只需要按照API文档的要求进行注册即可使用,客户端不需要安装任何软件、控件或地图,所有运算都会在XX公司的服务器中运行,由API进行组织显示、分级缩放和漫游。
使用者只需要通过其API,利用Android开发包就可以将XX地图服务应用到自己的软件中。
其中客户端主要完成地图的加载、地图浏览和查询功能,它的设计重点是地图浏览和查询界面,以及将用户的访问和查询请求打包发送给服务器[9]。
应用服务器方面则负责处理用户的访问和查询请求,数据服务器则用于存取各类空间数据和属性信息,采用SQLServer数据库存取表格,并在接到Query查询指令后执行相应的操作[9]。
系统体系结构如运行如下图所示。
图2-1地图服务原理图
3.
远程指令控制功能
3.1.基本原理及设计
本软件的远程指令控制功能本质上是使用了Android系统的短信收发和系统的广播机制再加上自编的指令编码实现对丢失手机的功能控制,我们把它定义为本软件的第二道防线。
基于这道防线,我们可以通过安全手机向丢失的手机进行远程控制响铃、PIN码锁屏、远程定位、获取新SIM卡号码和格式化丢失手机SD卡等功能。
首先,需要为主机设置安全密码和一个安全手机号码,并对这两个数据保存到系统的配置文件。
在这里使用到的是Android数据持久化的一种做法:
SharePreference:
SharePreference用来存储和检索一些关键变量的内容,这些内容常驻于手机xml文件之中,它是使用键值对的方式来存取文件中的数据的[4]。
Android提供了一个SmsManager.class让应用程序拥有完整的权限来进入SMS短信的管理,自从Android1.5版本之后,SmsManager信息管理器可以支持GSM和CDMA的移动手机通信标准。
[5]发送一条SMS信息对Android系统来说有相当规范的步骤:
(1)在AndroidMainifest.xml文件中声明权限:
<
uses-permissionandroid:
name="
android.permission.WRITE_SMS"
/>
android.permission.READ_SMS"
(2)使用SmsManager.getDefault()静态方法,获取SmsManger的实例:
SmsManagermySms=SmsManager.getDefault();
(3)定义一个目标号码和发送文本,使用sendTextMessage()方法发送SMS信息到另一个Android设备:
Stringdestination="
123456789"
;
Stringmsg="
Sendingmyfirstmessage"
mySMS.sendTextMessage(destination,null,msg,null,null);
在Android系统中有一个很重要的组件,那就是广播BroadcastReceiver,广播接收器组件用于接收和响应系统广播的消息。
广播接收器也需要通过Activity与用户交互进行桥接[6]。
Android系统在手机收到运营商的短信后,会向手机每个应用程序发送短信广播,通知所有应用程序此时此刻系统有短信接收,只要在程序中注册短信广播接收器,我们就可以在程序中分析短信文本。
实现具体的操作和功能实现。
系统的短息广播标志为:
android.provider.Telephony.SMS_RECEIVED。
本软件的远程指令控制需要建立一套用于安全手机和被盗手机相互识别的指令集,在软件中指令集的定义如下:
1.发送定位丢失手机指令:
(wujiandao*密码*dingwei)
2.发送激活报警铃声指令:
(wujiandao*密码*baojing)
3.发送设定屏保密码指令:
(wujiandao*密码*suoding)
4.发送格式化请求指令:
(wujiandao*密码*wipedata)
5.发送确定格式化指令:
(wujiandao*密码*geshihua)
6.获取丢失手机坐标指令:
(Location#纬度#经度*地址*)
根据以上的指令集,在程序中开启一个后台服务,在服务中注册短信广播接收器,这里需要把广播接收器的权限提至最高,保证一旦接收到系统的短信可以最先过滤和分析这些指令;
一旦确定是以上指令集的内容,则将指令解析并销毁短信广播,保证不影响其他应用程序的正常工作。
3.2.底层平台导入和开发步骤
3.2.1.申请密钥
XX地图SDK提供的服务是免费的,接口无使用次数限制。
我们首先要需先申请密钥(key),才可使用该套SDK。
任何非营利性程序请直接使用,商业使用必须请参考使用须知。
我是四川江津的魏先生,都说男人四十一支花,但是我却不一样。
每次和妻子xing爱总是一两分钟就结束了,没办法,只好做做停停,还得忍来忍去、小心谨慎、越小心越不行,弄不好就滑了下去,前功尽弃,从未体会过书上所说的那种死去活来,翻云覆雨的奇妙感觉,心中憋气可又没有办法.一次在网上看到一款纯中药制剂的药——马氏丹方,于是我就加了马老中医的徽❤msdf003,就买了一盒试试,嗨!
只用了一个星期,那种“上上下下”的感觉呀,“短时间”是无法体会到的,只有深入之后,才能感觉到其中的奇妙滋味,真的要快“飘”起来了……真的感谢马老中医,让原来2分钟的我持续30分钟,效果实在不错!
不容错过,实在的好药,实在的疗程!
通过这个网站同意与XX的协议,我们就可以获得密钥。
3.2.2.导入.jar和.so文件
在项目Libraries里添加baidumapapi.jar,将libBMapApiEngine_v1_3_5.so复制到工程目录下的libs\armeabi。
3.2.3.初始化声明
地图、定位、搜索功能都需要BMapManager来管理,BMapManager提供四个接口,init,start,stop,destroy。
建议在Application里生成BMapManager对象并初始化,在程序退出时调用destory,在需要使用sdk功能的Activity的onCreate里调用start,onDestroy调用stop,或者onResume/onPause分别调用start和stop[1]。
3.3.模块框架图
图3-1远程追踪指令模块流程图
3.4.模块详细设计
3.4.1.指令接收器的设计与实现
指令接收器的核心类是SmsReceiver,该类是自定义的广播接收器,继承Android中的BroastReceiver,是程序远程控制指令的核心类,主要用于接收和解析收到的指令短信,对非指令短信进行过滤;
此类的使用首先是在AndroidManifest.xml文件进行注册,这样就可以保证当Android系统接收到短息,向所有程序发出短信广播的时候,本程序能接收到短信广播和广播夹带的文本。
(1)广播注册代码:
receiverandroid:
.baojing.SmsReceiver"
>
<
intent-filterandroid:
priority="
2147483647"
actionandroid:
android.provider.Telephony.SMS_RECEIVED"
/intent-filter>
/receiver>
其中android:
priority为广播的优先级,将此优先级别设置较高的参数,保证本程序能够拦截短信并对特定短信进行解析。
(2)功能代码:
publicvoidonReceive(Contextcontext,Intentintent){
//判断传来Intent是否为短信
if(intent.getAction().equals(SMSACTION)){
Bundlebundle=intent.getExtras();
//接收由Intent传来的数据
//判断Intent是有数据
if(bundle!
=null){
//pdus为android内置短信参数identifier,通过bundle.get("
"
)返回一包含pdus的对象
Object[]smsObject=(Object[])bundle.get("
pdus"
);
//构造短信对象
SmsMessage[]messages=newSmsMessage[smsObject.length];
for(inti=0;
i<
smsObject.length;
i++){
messages[i]=SmsMessage.createFromPdu((byte[])smsObject[i]);
}
for(SmsMessagecurrentMessage:
messages){
if(currentMessage.getDisplayMessageBody().length()>
10){
Stringsubstr=currentMessage.getDisplayMessageBody().substring(0,10);
if(substr.equals("
wujiandao*"
)){
//屏蔽指令短信,以防干扰其他应用程序
abortBroadcast();
IntentmyIntent=newIntent(context,DoAfterReceiveMessage.class);
..............
context.startActivity(myIntent);
}
if(currentMessage.getDisplayMessageBody().substring(0,9).equals("
Location#"
//abortBroadcast();
//屏蔽短信
Log.d("
Sys"
"
SMS:
Intenti=newIntent(context,LocationMapActivity.class);
context.startActivity(i);
}}}}}}
3.4.2.指令业务分发器的设计与实现
指令业务分发器的核心类是DoAfterReceiveMessage,主要是用于处理由SmsReceiver传送过来的远程指令功能业务;
本质上它是一个业务逻辑分发器,根据不同的指令,启动不同的业务功能;
与此同时,它还肩负一个向安全手机反馈的功能。
(1)获取从SmsReceiver传过来的短息:
/*接收传递来的信息*/
privatevoidreceiveMessage(){
IntentstartingIntent=getIntent();
if(startingIntent!
=null){
Bundleinfod=startingIntent.getExtras();
if(infod!
=null){
number=infod.getString("
sms_Address"
messageText=infod.getString("
sms_Text"
}
(2)分发处理从SmsReceiver传过来的业务请求,启动不同的业务功能:
protectedvoidonResume(){
super.onResume();
if(secret_number_acquire()==null){
sendMessage("
您手机未设定密码,不能进行远程操作。
number);
DoAfterReceiveMessage.this.finish();
}elseif(messageText.equals("
+secret_number_acquire()+"
*dingwei"
.............(启动XX地图定位功能)
DoAfterReceiveMessage.this.finish();
*baojing"
.............(启动响铃功能)
*suoding"
.............(启动锁屏功能)
*wipedata"
.............(询问安全手机是否进行格式化)
*geshihua"
.............(启动手机格式化)
}else{
.............(用户输入的密码出错)
}}
3.4.3.定位器的设计与实现
定位器的主类是MyLocation类,主要实现的是利用XX地图API实现手机自我定位的一个功能,并最终获取了手机所在地的经纬度值,因为本软件使用了XX地图SDK,所以定位的功能实现也必须使用XX地图SDK,这样定位起来的坐标点才能与XX地图图层的地点相吻合。
图3-2定位器发送指令界面
(1)地图管理器、定位器、搜索器的初始化:
BMapManagermapManager=newBMapManager(getApplication());
mapManager.init("
285B415EBAB2A92293E85502150ADA7F03C777C4"
newMyGeneralListener());
mLocationManager=mapManager.getLocationManager();
mLocationManager.enableProvider((int)MKLocationManager.MK_GPS_PROVIDER);
//初始化MKSearch
mMKSearch=newMKSearch();
mMKSearch.init(mapManager,newMySearchListener());
(2)位置监听器的实现,获取经纬度:
mLocationListener=newLocationListener(){
publicvoidonLocationChanged(Locationlocation){
"
MyLocationislistening....."
if(location!
x=location.getLatitude();
y=location.getLongitude();
Log.d("
纬度x="
+x);
经度y="
+y);
Intenti2=newIntent();
i2.setClass(MyLocation.this,Null.class);
startActivity(i2);
}
}
};
3.4.4.报警响铃器的设计与实现
响铃的播放使用到的是Android音频管理器Aud