引言
报警是每个人生活中的基本生存技能之一,能够及时准确地报警,可以保障人身、财产安全,以及其他权利免受损失。目前报警方式以打电话为主,其局限性主要表现为3个方面:其一,突发事件地点随机,通常无法准确详细地描述事件发生位置;其二,遇到绑架、抢劫、暴力等威胁时,受害人无法通过打电话报警;其三,难以及时记录现场,无法提供现场证据。
图1 系统总体构架图
针对电话报警的局限性,本文设计了一种基于Android设备终端的报警系统。Android是一种基于Linux的开源操作系统,具有强大的应用层API和传感器控制功能 [1]。选用Android终端进行开发,不仅使报警操作简便,而且还具有GPS定位、自动拨打报警电话和录制现场视频的功能,从而在一定程度上避免了目前打电话报警的弊端。接警中心监控屏幕上可以直观显示报警地点,方便警方出警。该系统也可以扩展到其他应用上,例如老人、小孩监护和智能医疗救护等,应用领域广泛。
1 系统整体设计
本系统包括报警客户端和接警服务器端两部分。当用户遇到危险时,报警客户端通过智能手机进行定位。定位到经纬度数据之后,以短信形式发送给接警中心,同时自动拨打报警电话。接警服务器端监听并接收报警信息,同时在地图上显示事故发生位置,规划出警路线,以便警务人员在第一时间做出反应,提高出警效率。报警结束后,将此条报警记录和电话录音保存在后台数据库服务器中。该智能报警系统的总体架构如图1所示。
2 系统硬件
报警客户端采用具有GPS定位、GPRS通信和网络连接功能的Android智能手机。接警服务器端的主控制台采用基于S3C6410X核心板的Android 3G开发平台。S3C6410X含有多个强大的硬件加速器,适合音视频、2D图形、显示运算等应用。通过对Android操作系统进行裁减和移植,对不同模块的驱动进行配置,该平台可以使用板载的DM9000A上网、扩展WiFi模块和GSM/GPRS模块,以及使用VGA接口连接投影,为接警服务器端的开发提供了强大的硬件支持。
系统的扩展硬件资源主要有:SIM300 GPRS模块,通过RS232接口与核心板连接,实现短信和通话的功能;TLWN321G+WiFi模块,通过USB接口与核心板连接,为开发板提供网络支持。系统硬件结构图如图2所示。
图2 硬件结构图
接警服务器端的GPRS通信模块采用的是SIM300,具有GSM/GPRS双频模块,内嵌TCP/IP协议栈,能够实现语音、短信、数据和传真信息的高速传输[2]。SIM300提供了标准的RS232串行接口,可以与Android 3G开发平台连接。Android 3G开发平台使用16C550芯片扩展串口来控制GPRS功能单元电路。使用GPRS通信模块之前,需要在内核中添加16C550设备驱动支持,这样Android 3G开发平台就可以通过串行口使用AT命令对SIM300进行电话操作。本系统中用到的AT命令集如表1所列。
表1 AT命令集
WiFi作为无线网络的技术之一,其主要特性表现为传输速度快、可靠性高、组网方便。本设计使用TLWN321G+作为拓展的WiFi无线网卡模块,对Linux系统上USB无线网卡的驱动进行分析和移植,使接警终端具备加载无线网络连接的功能。
3 软件设计
3.1 报警客户端设计
紧急情况随时都可能发生,这就要求应用软件必须兼顾稳定性和实时性。客户端报警程序的设计分为普通报警和紧急报警两种。在普通报警情形下,用户主动触发该应用程序,选择适合的报警类型(例如火警、医疗救护等)进行报警,也可以选择是否进行视频录制;在紧急报警(如绑架、抢劫等)的情形下,用户来不及操作手机,这时用户可以剧烈摇晃手机,程序监测手机重力感应器,当重力加速度达到所设置的阈值后,自动向110报警中心报警,并进行视频录制。手机报警端软件总体工作流程如图3所示。
图3 手机报警端软件总体工作流程
3.2 接警服务器端设计
接警服务器端的工作主要包括监听报警、接电话并录音、读取短信并解析经纬度,以及在地图上显示报警地点等。后台服务器一直在运行,始终监听报警信息。当接到报警时,首先接警终端发出报警提示音,接听报警电话后,监听通话内容并录音,然后读取报警短信,解析出短信中的经纬度信息,最后将经纬度信息写入百度地图中,在地图上显示出报警的具体位置。接警终端软件总体工作流程如图4所示。
图4 接警终端软件总体工作流程
4 关键技术分析
4.1 定位技术在Android终端的实现
本报警系统采用百度地图API进行GPS定位操作和地图操作。百度地图API官网提供了已经封装好的SDK,其中包括定位和地图相关的接口,利用设备当前的GPS信息(GPS定位)、基站信息(基站定位)和WiFi信息(WiFi定位)共同完成定位。GPS定位精度最高,平均精度在10 m左右,但定位时间较长,且受环境影响较大,例如有建筑物遮挡时终端就会由于搜索不到卫星而定位失败。基站定位是利用基站对手机距离的测算来确定手机位置的,其定位精度很大程度上依赖于基站的密度[4],平均精度为200 m,利用地面移动基站对卫星信号进行辅助,在某些卫星信号较差的情况下,也能实现卫星信号的快速捕获和用户的快速定位[5]。WiFi定位是根据设备获取的WiFi信息进行定位,平均精度为20 m。百度地图SDK将这3种定位方法结合起来,使用户无论在室内还是室外都可以成功定位。使用百度地图API,可以在报警端结合以上3种定位方式进行定位,也可以实现接警端的地图显示功能,符合智能报警系统的需要。
使用地图API之前首先要申请密钥,进行官方授权确认。官方确认需要联网才能进行,当检测到当前终端未联网时会给出相应提示,然后设置客户端定位选项,例如是否打开GPS、设置坐标类型等,最后开始注册监听定位,利用百度地图API中相应方法,可以获取纬度、经度、当前城市、当前县区和地址等信息。
接警服务器端不需要定位操作,只需在读取到报警人的经纬度后,将坐标在地图上标记出来。这要用到百度地图的控件MapView,并对地图进行实时更新。经纬度在地图上显示的实现方法如下:
MapController.animateTo(new GeoPoint(纬度, 经度,...));
4.2 GPRS通信模块的实现
Android SDK已经对GPRS通信操作进行了封装,包括发送短信、打电话、发送Email等。短信功能和通话功能需要在AndroidManifest文件里添加相应权限后,调用封装好的相关函数。打电话功能采用了Android系统自带的打电话Intent,通过Intent对象使用Intent.ACTION_CALL,直接从当前活动跳转到系统通话界面,并用Uri.parse()方法将报警电话号码带入。
为了提高报警的准确性,方便接警端对短信数据进行解析,本系统对短信的格式定义如下:
短信格式的开头设计为字符“Alarm”,接警终端只接收以字符“Alarm”作为开头的短信,并对该类短信进行解析,其他短信全部过滤掉,一定程度上可以解决短信误报的问题。数据1代表报警类型:“1”代表110报警中心,“2”代表120医疗救护中心,“3”代表119火警中心,“4”代表122交通事故中心。数据2代表定位后得到的纬度,数据3代表经度。由于市场上有些手机发送短信会在结尾处加上一些默认字符,为了防止这样字符造成干扰,短信以字符“tail”作为结尾,接警服务器端只解析tail之前的字符,从而避免这一问题。不同的数据之间采用“!”作为分隔符,将不同类型的数据分隔开,接警服务器端可以通过split()函数把不同数据解析出来,方便处理。
4.3 通话录音和视频录制
接警服务器端需要对报警电话内容进行录制,存入后台数据库以备使用。通话录音程序在后台对电话进行监听,它需要TelephonyManager获取手机状态,然后在不同的手机状态下用MediaRecorder做录音处理。在监听手机状态之前,先通过File类创建录音保存路径和保存文件夹。电话打进来时,等待录音状态;电话接听后,创建新的MediaRecorder,同时创建保存录音信息的音频文件;获取MIC后,调用底层录音设备,开始录音;当电话挂断时,停止并保存录音,清除缓存。
报警客户端要进行现场视频的录制。由于目前我国网络传输速率依然较慢,在短信和电话报警的同时将视频数据传输到接警端是不现实的,因此将录制的视频保存在本地。首先在本地建立文件夹,然后设置视频摄像头和麦克风资源,通过start()方法开始视频录制。对视频录制模块设置单独的线程,使报警和视频录制并行实现。视频录制需要在AndroidManifest文件中声明使用权限,并对额外使用的硬件属性进行声明,例如:
<usesfeature android:name="android.hardware.camera"/>和<usesfeature:name="android.hardware.camera.autofocus"/>。
4.4 系统实时性问题
报警系统对实时性和准确性要求很高,因此本设计采用多线程机制保证各子模块及时并行完成任务。报警客户端包括GPS定位线程、GPRS通信线程及视频录制线程。定位时间会受到网络环境和信号强度的影响,例如在网络连接不畅和手机信号较弱的情况下,定位时间较长。为了防止定位还未成功就发送报警信息,需要对GPRS通信线程进行延时操作。在获得定位数据之前,GPRS线程处于阻塞状态,继续等待定位数据,此时GPS线程和视频录制线程交替呈现就绪和运行状态;获取到定位数据后,GPS线程变为阻塞状态,此时GPRS通信线程和视频录制线程交替呈现就绪和运行状态。报警端线程状态如图5所示。接警端与报警端类似,这里不再赘述。
图5 报警端线程状态
图6 报警手机客户端
5 测试与结果
笔者在Android智能手机和Android 3G开发平台上进行报警、接警测试,测试结果如图6和图7所示。测试结果表明,在GPRS和3G网络连接通畅的情况下,户外报警平均精度达到10 m,室内报警平均精度达到80 m,在有WiFi连接的情况下,定位精度会进一步提高。接警服务器端可以处理多个报警信息,地图显示准确,路径规划显示正常,通话录音正常。
图7 接警服务器端
结语
本文设计并实现了基于Android终端的智能报警系统,将百度地图API巧妙运用到报警系统中,实现了定位和地图的显示;运用Android SDK实现音视频的录制和存储;运用GPRS通信和网络通信等手段,将报警端、接警端、PC后台服务器三者相互联系,实时通信。
本系统结构合理、操作方便、报警准确、测试效果良好。摇一摇报警和自动定位功能很好地解决了打电话报警的诸多问题,具有一定的实用价值。