APP下载

基于Android平台的手机防盗与定位系统的研究与设计

2016-10-14王维李亚

价值工程 2016年5期

王维 李亚

摘要:目前智能手机的功能是越来越丰富,而且更多的功能也会被植入到手机之中。手机防盗也开始成为热门研究领域。文章主要是以Android手机为例,研究并设计了一种非常简单有效的手机防盗功能,能够让机主在丢失手机之后能够快速定位到该机,以实现简单的防盗功能。

Abstract: The function of the intelligent mobile phone is more and more rich, and more features will be implanted into the mobile phone. Phone anti-theft began to become a hot research field. This paper takes Android mobile phone as an example to research and design a kind of very simple and effective mobile phone anti-theft function. It can let owner to quickly locate the phone after losing it to realize a simple anti-theft function.

关键词:Android;手机防盗;手机定位;GPS;Eclipse

Key words: Android;phone anti-theft;mobile phone location;GPS;Eclipse

中圖分类号:TP316 文献标识码:A 文章编号:1006-4311(2016)05-0226-04

0 引言

随着科技的不断进步和发展,智能手机已经普及开来,人们的生活也越来越离不开智能手机。智能手机里不仅保存了短信、通信录,甚至还保存了用户的银行卡密码、QQ聊天记录等隐私数据。手机一旦丢失,往往会给用户造成巨大的损失。针对上述问题和实际的需求,本文主要研究了基于Android平台的手机防盗问题的基本解决方案。

1 Android手机关于手机防盗问题的简析

1.1 Android系统的简介 Android 是基于Linux内核的软件平台和操作系统,采用软件堆层(software stack)的架构,主要分为上、中、下三个层次。其中,底层是基于Linux的核心基础层,最上层为各公司用Java程序自主编写应用软件,函数库Library和虚拟机Virtual Machine则分布在中间层。在用Android开发应用软件时,首先要搭建Android开发环境,完善主体架构和各个层次及其功能,掌握各部分的配置属性。Android共包含有Activity(活动)、Service(服务)和Broadcast Receiver(广播)和ContentProvider(内容提供者)四个组件,但是并非所有Android系统都必须具备这四大组件。用于记录和注册所使用的各种组件的AndroidManifest.xml文件,其主要功能是为项目配置权限,因此在Android系统中发挥着至关重要的作用。当启动一个Android程序时,为了避免系统报错,须在AndroidManifest.xml 文件中对各组件逐一申明。

1.2 手机防盗与定位系统的逻辑流程(图1)

1.3 应用程序开发环境的搭建 该开发环境是Windows操作系统下,由“JDK(Javadevelopment kit)+Eclipse +Android SDK(Softwaredevelopment kit)+ADT(Android development tools)”组成。由于Android开发主要是使用了JAVA语言,故必须包括JDK,JDK是整个Java编程系统的核心组件,它主导Java的运行环境、ava工具及Java 基础类库。Eclipse作为 Android 程序开发IDE(integrateddevelopment environment)来使用的;Android SDK 是由Google提供的完全开放源代码的Android专属软件开发工具包,用来开发适用于Android平台的第三方应用软件。该开发工具包中有一个专用于程序设计的布局管理器,其布局方式非常灵活,常用布局形式有三种:线性布局、相对布局和绝对布局。另外,还有一个支持Android工程和工具的通用插件——ADT,安装该插件后,系统的创建、运行和调试都会变得十分简单。

2 防盗的核心设计

首先需要设置一个安全号码,该号码与本机号码是不一样的,但该号码是整个防盗体系结构中的关键一环,当我们的手机丢失后,别人打开手机时换装其他的手机卡,就会激活我们设置的安全号码,手机会在后台联系到安全号码,并向安全号码发送各种信息,安全号码也可以远程发送相关信息来遥控被盗手机,如获得被盗手机的具体位置,以及删除手机所有的信息。只用通过安全号码我们才能知道丢失的手机在哪个位置,以便于快速找到丢失的手机。设置安全号码比较简单,只是将号码保存到SharedPreferences中即可。

2.1 绑定SIM卡的序列号 接下来要做的事就是绑定机主的SIM卡的序列号。每个手机卡SIM卡的序列号都是唯一的,之所以不绑定手机号码是因为有些SIM卡里并没有写入手机号码,比如移动卡和联通卡。绑定SIM卡的原理很简单,首先通过getSystemService(TELEPHONY_SERVICE),获取TelephoneManager对象,然后通过该对象的getSimSerialNumber方法获取SIM卡的序列号。获取SIM卡序列号后我们将该序列号保存在SharedPreferences中即可。

以下代码为绑定SIM卡的序列号的核心代码:

void bindSIMSerialNumber(Context context){

// 获得SharedPreferences 用来保存SIM的序列号

SharedPreferences sp = context.getSharedPreferences("config", MODE_PRIVATE);

String sim = sp.getString("sim", null);

if(sim==null){

//还没有绑定SIM序列号

tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

sim = tm.getSimSerialNumber();

Editor editor = sp.edit();

editor.putString("sim", sim);

}else{

//已经绑定序列号 不做处理

}

//提交到SharedPreferences中

editor.commit();

return ;

}

2.2 检查SIM卡是否更换 SIM卡的插入一般都会关闭电源,就会导致手机的重新启动。最新设计的手机都是以侧面卡槽换卡,同样的也会导致手机重启。因此我们需要设计一个监听手机重启事件,当手机重启时会检查当前的SIM卡与之前绑定的SIM卡的序列号是否一致。如果发现序列号不一致,那么程序自动给我们的安全号码发送短信、发送位置信息等功能获取手机当前的位置、SIM卡等信息。同时我们也可以通过其他手机给我们的手机发送短信指令,根据不同的指令安全卫士会做一些锁屏、删除数据、恢复出厂设置等操作以保护我们手机数据的安全。

判断是否更换SIM卡的核心代码:

<!-- 注册一个广播接收者 如果手机发送重启将 会发送该广播-->

public void onReceive(Context context, Intent intent) {

sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);

tm=(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

// 讀取之前保存的SiM信息;

String saveSim = sp.getString("sim", "");

//读取当前的sim卡信息

String realSim = tm.getSimSerialNumber();

//比较是否一样

if(saveSim.equals(realSim)){

//sim没有变更,还是原来的SIM卡

}else{

// sim 已经变更

System.out.println("sim 已经变更");

}

}

}

3 手机定位模块功能的设计

目前有三种常见的手机定位技术:GPS定位技术、基站定位技术和Wi-Fi定位技术。

GPS定位技术:即卫星定位技术。它基于设备GPS芯片以及GPS卫星来追踪物体位置,GPS芯片性能及应用环境对定位精度有较大的影响。而且室内无法接收GPS信号,因而无法实现室内定位跟踪。GPS定位耗电量较大,但是精度较高。内置GPS接收器的手机即使在信号盲区,也能准确发送或接收位置信息。

基站定位技术:基于设备获取的基站信息来跟踪物体的位置。该技术对外部运行环境不挑剔,但是基站信号的覆盖半径会影响定位精度。

Wi-Fi定位技术:定位端只要侦听附近的Wi-Fi热点,采集每个热点信号的强弱参数并发送至服务器。服务器基于每个热点的参数查询与之对应的坐标参数,通过运算获取客户端的位置信息,并将信息输出至客户端。Wi-Fi定位不受外部环境的干扰,因而定位精度较高。

3.1 Android的GPS相关类 ①Location Manager:提供访问定位服务的功能,用于获取最佳的定位提供者,所有GPS定位相关的服务、对象都将由该对象来产生。例如获取最新的位置信息,指定Location Provider的更新周期,获取设备位置的变化信息。②Location:它就是一个代表位置的抽象类,主要提供了经纬度、标准时间、高度、测量速度、方位角等内容。③Location Provider:Android的定位信息由LocationProvider对象来提供,该对象代表一个抽象的定位组件。在开始编程之前,需要首先获得Location Provider对象。④Location Listener:当设备的位置信息改变时,该类将进行回调。⑤Criteria:通过设置它的属性,Location Provider可以选择合适的提供者。

这五项相互协作为应用程序提供位置信息服务,它们之间的关系如图2所示。

3.2 Android手机定位代码的实现 通过调用Android的GPS相关类,把得到的当前位置信息保存在SharedPreferences中,这样就可以随时取得手机的位置了。

void getLocation(){

//得到一个位置管理器

LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);

//为位置管理器设置一个标准,该标注是代表精确的

Criteria criteria = new Criteria();

criteria.setAccuracy(Criteria.ACCURACY_FINE);

String proveder = lm.getBestProvider(criteria, true);

//设置一个位置更新的监听的匿名内部类

lm.requestLocationUpdates(proveder, 0, 0, new LocationListener(){

public void onLocationChanged(Location location) {

//获取经度

String longitude = "j:" + location.getLongitude() + "\n";

//获取纬度

String latitude = "w:" + location.getLatitude() + "\n";

//获取精确度

String accuracy = "a" + location.getAccuracy() + "\n";

//将经度纬度和精确度保存到SharedPreferences并提交

SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);

Editor editor = sp.edit();

editor.putString("lastlocation", longitude + latitude + accuracy);

editor.commit();

}

public void onStatusChanged(String provider, int status, Bundle extras) {};

public void onProviderEnabled(String provider){};

public void onProviderDisabled(String provider){};

);

}

4 軟件的实际测试效果

首先在Android手机安装了本软件的测试版,首先打开本软件,进入到简单的欢迎界面;(图3)

第二步是绑定自己手机号码的SIM卡,即将手机的串号绑定进去;(图4)

第三步,也是最为关键的一步,就是要设置一个安全号码,如果本机被盗,则对方在换卡后重启手机,那么本应用会自动向安全号码发送手机的位置信息;(图5)

第四步,设置完成,保持安全号码到手机。(图6)

完成了上述步骤之后,开始将手机的SIM卡拆下来,换上一张新的卡,并开机启动。启动后则手机将会触发启动的广播"android.intent.action.BOOT_COMPLETED",手机应用接受到该广播后将发送手机的位置到我们的安全号码中。

通过图7的内容,确实可以看到当我们把手机卡换了之后,手机会向原来设置的安全号码发送了当前手机的位置信息,这样也验证了本软件的成功运行了。

5 总结

本文提出并设计了一种基于Android智能手机设备平台下的一种有效的手机防盗解决方案,采用了JDK+Eclipse+Android SDK+ADT搭建的开发环境,并使用了智能手机的GPS模块,但该模块不是必须的,查询手机位置也可以通过网络来实现。但在具体开发过程中,如果没有一定的编程基础以及对Android技术的了解,着手开发类似本文功能的手机防盗功能模块还是具有一定的难度的。随着Android技术的不断快速发展,更加强大的手机防盗功能会被更容易的开发出来。

参考文献:

[1]叶达峰.Eclipse编程技术与实例[M].北京:人民邮电出版社,2006:67-68.

[2]王悦,岳玮宁,王衡,董士海.手持移动计算中的多通道交互[J].软件学报,2005(01).

[3]李辉.基于Android平台的手机导航系统的设计与实现[D]. 西安电子科技大学,2014.

[4]饶润润.基于安卓操作系统的应用软件开发[D].西安电子科技大学,2014.

[5]闫晋佩,何晖,安文欢,张小辉,任建宝,齐勇.国内第三方Android应用市场安全性的检测[J].计算机科学,2015(12).

[6]熊健.基于Android平台的企业移动应用开发框架的分析与设计[J].软件,2012,33(11):44-46.