APP下载

基于Android平台的地震预警终端软平台的设计与一种实现

2017-01-13王晓磊赵士达高文晶

地震工程学报 2016年6期
关键词:百度预警终端

朱 宏, 王晓磊, 刘 磊, 赵士达, 高文晶

(天津市地震局,天津 300201)

技术交流

基于Android平台的地震预警终端软平台的设计与一种实现

朱 宏, 王晓磊, 刘 磊, 赵士达, 高文晶

(天津市地震局,天津 300201)

探讨Android平台在地震预警软件中的开发技术。首先介绍系统的整体框架以及Android的架构,然后详细分析极光JPush推送、百度定位服务和百度地图API开源服务在Android系统上的开发方法及其在地震预警软件的应用。该系统可实现Android终端获取Jpush推送的地震预警信息、实时显示当前场所位置和显示震中距及S波到达剩余时间等预警信息功能。

安卓; 地震预警; JPush推送; 百度地图API

0 引言

地震灾害一直是人类面临的主要灾害之一。为了减少地震灾害造成的损失[1],中国地震台网中心已经开始应用云技术和消息推送技术进行地震速报结果的发布工作。而地震预警的技术更苛刻,要求从报警时间上获取秒量级上的突破。不管是地震速报还是地震预警,其地震信息获取及发布涉及的技术都可以归结到通讯领域。

为进一步利用通讯领域近年的科学技术,特别是广大用户使用的Android移动平台[2],有必要从底层核心技术角度开发地震信息推送平台,提高震害防御信息的信息社会服务功能。基于这些因素,本文结合JPush推送、LBS(定位服务)定位和百度地图API(应用程序编程接口)的特点,研究基于Android平台的地震预警终端软平台的设计与应用及相关开发技术。

1 Android平台结构简介

Android系统是由Google公司和开放手机联盟推出的开放源码的操作系统[3],主要用于移动设备,如智能手机和平板电脑。该软件层次结构自下而上分为以下几个层次[4]:

(1) 基于Linux的内核的系统(OS);

(2) 各种库(Libraries)和Android运行环境(RunTime);

(3) 应用程序框架(Application Framework);

(4) 应用程序(Application)。

Android主流的开发环境是Java,开发平台选用Eclipse(一种基于Java的开源的、可扩展的平台)[1]。Eclipse安装ADT(Android Development Tools,安卓开发工具)后就可以下载并使用Android的SDK(Software Development Kit, 软件开发工具包)。同时SDK还提供可视化的模拟器以及DDMS(Dalvik虚拟机调试监控服务)工具,用于实时查看软件运行情况等操作[8-9]。本文的软平台开发基于以上工具开发和调试,并最终在手机终端上通过测试和使用。

2 地震预警软终端信息获取及显示

本团队开发的地震预警软终端显示平台App主要分为三部分:一是通过极光推送将地震预警信号推送到手机上;二是在界面上实时显示当前位置,即定位功能,并显示用户当前位置的经纬度;三是通过界面显示地震S波到来的倒计时时间。

2.1 JPush极光推送接收

极光推送(JPush)是极光公司开发者提供的消息推送服务,它通过利用云端与客户端之间建立稳定、可靠的TCP/IP的长连接来向客户端应用推送实时消息。极光推送服务提供消息暂存、转发和推送的功能,消息不会丢失,因此客户端无需保持在线状态及进行反复轮询。单一终端多个应用共享一个服务进程和一条TCP(传输控制协议)长连接,从而能有效降低手机的耗电量和数据流量[10]。极光推送服务为开发者提供了一个快速推送信息的管理控制台,将推送功能可视化,可以直接通过控制台针对特定的用户群完成通知、消息的推送。

2.1.1 JPush推送接收客户端整体设计

在Android平台开发Jpush推送接收客户端需要在项目中添加JPush服务的Android SDK。如图1所示,JPush SDK起到了用户应用程序与JPush服务器的桥梁作用,用户的应用程序不需要直接与复杂的Push HTTP/HTTPS API进行交互,而是由JPush SDK与Push HTTP/HTTPS API进行交互来访问Push服务器,从而使推送开发简单化[1]。

图1 JPush服务的框架设计Fig.1 Frame design of JPush service

2.1.2 JPush推送服务SDK的集成

用户应用程序要接收JPush服务器推送的信息就必须对JPush SDK进行集成。在本设计中采用无账号登录方式,用户无需接入JPush用户体系,每个终端直接通过API Key向服务端请求用户标识id,服务器根据端上的属性生成userid。Jpush SDK前端将生成一个SS的服务,启用设备的相关权限进行处理,优化与服务器进行长连接的链路。例如接驳使用天津移动的网络去接入天津移动本地的机房是最佳选择,延迟是10~20 ms,但如果因为信道故障等原因导致切换到边远地区的某一台服务器上,延迟可能在300 ms以上。因此前端增加了可选服务器的设置,根据接入网络的地点与接入进来的运营商去连接最佳服务器。JPush推送服务实际上还提供了一个类似于DNS的服务。建立长连接之后,通过JPush推送的MQ的机制,进到其他的IDC(Internet Data Center互联网数据中心)做处理,实现各接收机房数据汇集到一起,集中处理。集成所需的核心代码如下:

android:theme=“@android:style/Theme.Translucent.NoTitleBar”

android:configChanges=“orientation|keyboardHidden”>

android:name=“cn.jpush.android.ui.PushActivity” />

android:name=“android.intent.category.DEFAULT” />

android:name=“cn.jpush.android.service.DownloadService”

android:enabled=“true”

android:exported=“false” >

android:name=“cn.jpush.android.service.AlarmReceiver”/>

2.2 基于百度地图API地震预警的信息显示

百度地图API是一套为开发者免费提供的基于百度地图的应用程序接口,包括JavaScript、iOS、Andriod、静态地图和Web服务等多种版本,它可以运行百度地图Android SDK开发的应用程序[11]。

2.2.1 用户当前位置定位和实时显示

百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口,通过调用定位SDK的方法,实现地图当前位置的准确定位。以下定义了一个类来实现BDLocationListener接口的方法,包含onReceiveLocation方法和onReceivePoi方法。其中onReceiveLocation方法实现定位并获取用户当前经纬度和方向。代码如下:

public class MyLocationListenner implements BDLocationListener {public void onReceive Location(BDLocation location) {

if (location == null || mMapView ==null)

return;

MyLocationData locData=new MyLocationData.Builder()

.accuracy(location.getRadius())

.direction(100).latitude(location.getLatitude())

.longitude(location.getLongitude()).build();

mBaiduMap.setMyLocationData(locData);

if (isFirstLoc){

isFirstLoc=false;

LatLngll=new LatLng(location.getLatitude(),

location.getLongitude());

MapStatusUpdateu=MapStatusUpdateFactory.newLatLng(ll);

mBaiduMap.animateMapStatus(u);

}

2.2.2 利用TextView控件显示当前所在地的地理信息

百度地图SDK提供了获取经纬度的方法。首先需要实例化BDLocation对象,再通过BDLocation方法的Location.getLatitude()和Location.getLongtitude()方法获取到当前经纬度后,利用TextView控件以醒目的颜色和合适的字体在屏幕上展示出来。TextView控件为Android平台的文本编辑框,显示的重要信息都可以通过此编辑框。 android.graphic.Color.RED表示TextView中文字的颜色为红色。TextView.setTextSize(15)表示文字的大小为15号。核心代码如下:

textView1=(TextView)findViewById(R.id.textView1);

textView1.setText(“纬度:”+location.getLatitude()+“”);

textView1.setTextColor(android.graphics.Color.RED);

textView1.setTextSize(15);

textView2=(TextView)findViewById(R.id.textView2);

textView2.setText(“经度:”+location.getLongitude()+“”);

textView2.setTextColor(android.graphics.Color.RED);

textView2.setTextSize(15);

2.2.3 地震预警S波倒计时时间的显示

地震发生后,首先到达的是上下震动的P波,震动幅度相对较小。由于用户所处位置与震中位置远近的不同,要过大约几秒、十几秒甚至几十秒,水平运动的S波才会到来。地震预警就是利用地震发生后P波与S波到达的时间差,提前发布地震信息。统计显示,在距离震源50 km内的地区,地震S波落后P波约7 s;90~100 km内的地区落后11~13 s,即震源距离与虚波速度约8 km/s的比值。地震预警时间(或显示终端显示的S波剩余时间)应小于这个时间才有预警效果。因此对地震P波信号数据处理的准确性、实时性直接影响整个终端软平台的正常运行[15]。

1976年7月28日唐山地区发生了里氏7.8级的地震,造成整个华北地区均有强烈震感,而天津市是首都圈地区唯一遭受过烈度达到Ⅷ度以上的特大城市。通过后台设置,将软件默认的震中位置设置为唐山“7·28”地震震中进行测试,然后通过DistanceUtil的getDistance()方法得到当前位置和震中的距离,最后将该距离除以S波在地壳中传播的平均速度3.5 km/s,得到S波到来的时间。

在Android.os.*下存在CountDownTimer这个类,通过继承这个类,实现它的OnTick和OnFinish方法。将得到的时间值传入这个方法中,实现倒计时的功能。核心代码如下:

class MyCountDownTimer extends CountDown

Timer{

public MyCountDownTimer(longd,long countDownInterval){

super(d,countDownInterval);

}

public void onFinish(){

textView4.setText(“done”);

}

public void onTick(long millisUntilFinished) {

textView4=(TextView)findViewById(R.id.textView4);

textView4.setTextColor(android.graphics.Color.RED);

textView4.setText(“倒计时(”+millisUntilFinished/1000+“秒)”);

}

}

其中:d为传入的倒计时时间值;countDownInterval为时间间隔,这里设置为1 000 ms,即1 s。

3 行业内同类软件对比及应用前景

3.1 行业内同类软件对比

成都高新减灾所推出的“地震预警”软件已经可以在安卓市场和苹果市场上下载。该软件无论是页面风格搭配、还是功能实现上都已走在了行业的前端。美中不足的是,在数据来源上,成都高新减灾所使用了自主研发的简易加速度计,使数据的准确性及权威性及与地震台站的精密仪器之间存在一定的差异,且其预警算法及通讯技术并不公开,无法直接二次开发。

同高新所“地震预警”App相比,本文自主研发的终端软平台有自己的核心代码,可以按用户需求随时调整,但也存在一定的劣势,如界面规划布局不甚合理、未能提供其他避险抢险知识、地震信息获取源尚需进一步完善等。

3.2 应用前景

2014年由天津市地震局牵头申请的国家科技支撑计划“燃气管网地震预警与自动处置关键技术研究与示范”项目通过了预评审。本文进行终端平台开发的最终目的是为此项目的地震信息决策与指令发布平台进行服务。后期项目启动后,将燃气管网的分布示意图集成到软件中进行展示,并通过预警信息决策与指令发布平台对预警信息进行发布。整个预警信息发布流程如图2所示。

图2 预警信息自动处置工作流程图Fig.2 Automatic workflow chart of the early-warning information

4 功能测试

软件仿真采用华为荣耀6手机实机测试,分别对系统的三个主要功能进行测试。手机主要参数是Android4.4操作系统、3G RAM,海思920八核处理器并支持WIFI功能。接收JPush推送消息展示测试如图3所示。定位经纬度、地震预警S波倒计时和距离显示如图4所示。

图3 JPush推送消息测试展示Fig.3 Message push test using JPush service

图4 定位当前经纬度、倒计时以及距离展示 Fig.4 Demonstration of current longitude and latitude, location and the countdown and distance of S-wave

5 结语

本文基于Android平台和极光推送服务、百度开源服务(百度定位和百度地图)开发了地震预警终端显示软件平台。该平台主要获取各类地震预警信息:一是通过JPush推送消息,最快地获取预警信息;二是获取地震震中后,获取用户当前位置和震中距;三是计算显示S波剩余到达时间。通过Android系统真机测试证明,该平台可实现以上功能且对市场上的主流手机普遍兼容。

References)

[1] 赵士达,张楠,杨爽.基于云计算和Android的地震应急信息获取系统[J].计算机应用, 2014,34(增刊1): 298-300. ZHAO Shi-da,ZHANG Nan,YANG Shuang.Based on Earthquake Emergency Information Acquisition System of Cloud Computing and Android[J].Computer Applications,2014,34 (Supp1):298-300.(in Chinese)

[2] 郑云卿,黄琦.基于Android平台的软件自动化监控工具的设计开发[J].计算机应用与软件,2013,30(2):235. ZHENG Yun-qing,HUANG Qi.The Design and Development of Software Automation Monitoring Tools Based on Android Platform[J].Computer Applications and Software,2013,30 (2):235.(in Chinese)

[3] 彭璇,吴肖.Google Map API在网络地图服务中的应用[J].测绘信息与工程,2010,35(1):25-27. PENG Xuan,WU Xiao.The Application of Google Map API on the Network[J].Surveying and Mapping Information Engineering,2010,35(1):25-27.(in Chinese)

[4] 陈璟,陈平华,李文亮.Android内核分析[J].现代计算机,2009(11):112-114. CHEN Jing,CHEN Ping-hua, LI Wen-liang.The Kernel Analysis of Android[J].Modern Computer,2009(11):112-114.(in Chinese)

[5] 宋小倩,周东升.基于Android平台的应用开发研究[J].软件导刊,2011,10(2):104-105. SONG Xiao-qian,ZHOU Dong-sheng.Research on Application Development Based on Android Platform[J].Software Guide,2011,10(2):104-105.(in Chinese)

[6] 高焕堂.Android应用框架原理与程序设计36技[M].台北:广悦文化事业有限公司,2008:13-83. GAO Huan-tang.Android Application Framework Principle and Program Design 36 Technology[M].Taipei: Kangyor Culture Co.Ltd.,2008:13-83.(in Chinese)

[7] 陈望挺,林满足,陈建,等,竺乐庆.基于JSP和Android的C/S结构问卷系统[J].计算机应用,2013,33(3):886-889. CHEN Wang-ting,LIN Man-zu,CHEN Jian,et al.C/S Structure Questionnaire System Based on JSP and Android[J].Computer Applications,2013,33(3):886-889.(in Chinese)

[8] Ed Burnette.Hello,Android:Introducing Google’s Mobile Development Platform[M].American Pragmatic Bookshelf,2009:278-282.

[9] 孟德欣,谢二莲.使用Google XML APIs Service实现Web查询[J].计算机应用研究,2004,24(增刊1):252-253. MENG De-xin,XIE Er-lian.The Query of WEB in Use Google XML APIs Service[J].Computer Application Research,2004,24 (Supp1):252-253.(in Chinese)

[10] 张波,王娟,邱宏茂,等.一种自动扫描地震漏检事件方法的研究与实现[J].地震工程学报, 2013,35(2):321. ZHANG Bo,WANG Juan,QIU Hong-mao,et al.Research and Implementation of an Automatic Scanning Method of Seismic Event Detection[J].China Earthquake Engineering Journal,2013,35(2):321.(in Chinese)

[11] 豆瑞星.百度成立LBS事业部[J].互联网周刊,2012,11(5):53-55. DOU Rui-xing.Baidu Set up LBS Division[J].Internet Weekly,2012,11(5):53-55.(in Chinese)

[12] 许德玮,桑梓勤,刘磊,等.基于云计算的医疗卫生位置服务平台研究[J].医学信息学杂志,2013,34(6):8-13. XU De-wei,SANG Zi-qin,LIU lei,et al.Research on Medical and Health Location Service Platform Based on Cloud Computing[J].Journal of medical information,2013,34(6):8-13.(in Chinese)

[13] 马志强.基于Android平台即时通信系统的设计与实现[D].北京:北京交通大学,2009:11-15. MA Zhi-qiang.Design and Implementation of Instant Communication System Based on Android Platform[D].Beijing Jiaotong University,2009:11-15.(in Chinese)

[14] 郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010:42-44. GUO Hong-zhi.Detailed Introduction to Android Application and Development[M].Beijing:Publishing House of Electronics Industry,2010:42-44. (in Chinese)

[15] 于凯,左自波,王颖轶,等.基于远程实时监测的高烈度区沉管隧道施工可视化系统[J].地震工程学报,2014,36(3):762-763. YU Kai,ZUO Zi-bo,WANG Ying-yi,et al.Visualization System of Immersed Tube Tunnel Construction Based on Remote Real-time Monitoring[J].China Earthquake Engineering Journal,2014,36(3),762-763. (in Chinese)

Design and Implementation of an Earthquake Early-warning Terminal Platform Based on Android Platform

ZHU Hong, WANG Xiao-lei, LIU Lei, ZHAO Shi-da, GAO Wen-jing

(EarthquakeAdministrationofTianjinMunicipality,Tianjin300201,China)

This paper discusses the development technology of Android platforms for earthquake early-warning software. First, we introduce the entire framework of our project design and Android application, then detail the development methods of JPush push, the Baidu positioning service, Baidu Maps API (Application Programming Interface), and other open-source Android services, and their application to earthquake early-warning software. The tests reveal that the designed Android terminal can effectively acquire earthquake early-warning information using the JPush push technique, which also displays the user’s current position, epicentral distance, and S-wave arrival time. Simultaneous Android system testing showed that this platform can achieve the above functions and is generally compatible with the mainstream mobile phones on the market. Compared with other similar software in this industry, this earthquake early-warning algorithm and communication technology are relatively open, and can provide a secondary service for the identification of targeted settings in different regions.

Android; earthquake warning; JPush push; Baidu Map API

2015-12-22 基金项目:天津市“十二五”防震减灾综合能力提升工程“地震监测技术系统完善与建设”分项;中国地震局地震科技星火计划项目(XH15003);天津市地震局青年基金课题(20141010)

朱 宏(1989-),男,助理工程师,主要研究方向为地震应急信息软件研发。E-mail:577834280@qq.com。

TP311.5; P315.75

A

1000-0844(2016)06-1016-06

10.3969/j.issn.1000-0844.2016.06.1016

猜你喜欢

百度预警终端
X美术馆首届三年展:“终端〉_How Do We Begin?”
Robust adaptive UKF based on SVR for inertial based integrated navigation
通信控制服务器(CCS)维护终端的设计与实现
法国发布高温预警 严阵以待备战“史上最热周”
百度年度热搜榜
园林有害生物预警与可持续控制
多功能北斗船载终端的开发应用
机载预警雷达对IFF 的干扰分析
百度医生
百度“放卫星”,有没有可能?