徐光侠,封 雷,涂 演,李 成
(1.重庆邮电大学软件学院,重庆 400065;2.重庆邮电大学通信与信息工程学院,重庆 400065)
随着移动设备的不断发展,智能移动终端应用程序的开发也呈现了很大的发展空间。2007年底,由Google牵头30家移动技术和无线应用领域的企业组成手机开发联盟(open handset alliance),发布了一个开放的智能移动设备设计的软件平台Android。针对目前在越来越快节奏的经济生活中,人们迫切想知道别人或自己所处的空间环境和周边的状况,例如指南针功能、天气预报功能等。该开发软件的特殊之处在于任意手机使用者可以通过短信形式自动获取软件使用者所处的位置,例如当需要获取用户甲的位置时,只需要发送一条含有特殊字符的短信到对方手机上,就可以获取到对方当前所在地点,最终实现地理信息的共享。
Android手机系统是基于Linux平台的开源手机操作系统,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(software stack),又名软件叠层的架构,主要分为3部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机(virtual machine),由C++开发,最上层是各种应用软件。Android系统架构由5部分组成,分别是Linux Kernel,Android Runtime,Libraries,Application Framework,Applications[1]。
传感器类型分为方向、加速度、光线、磁场、临近性和温度;编写传感器应用程序必须是基于常见的Active(活动),因为传感探头只是利用获取的数据来更新屏幕,且在使用传感器时应先引用Android.hardware.sensor,该活动的onCreate方法可以引用Sensor Manager,其中包含了所有与传感器有关的函数方法。
Android的地图使用包(google.Android.Maps)包括一系列地图开发功能类,在使用这些类时可以获得渲染、控制图层(共计20个地图层)覆盖等功能,程序员可以轻易实现Google Maps地图开发。其中MapView类是Map的基本类,当添加一个Map-View类后,就可以在屏幕上获得一个无功能的Google Maps。在获取Google Maps服务时,需要开发者获取一个准许使用MapView的API Key,才能在地图上加载地图资源。
Android和Google Maps的生活辅助系统主要分为3个子模块:天气预报模块,Google Maps模块,指南针模块。其结构如图1所示[2-3]。
天气预报模块主要通过解析Google Weather或者Yahoo网站的XML文档实现天气的实时预测。Google Maps模块通过手机短信模块与Google API的整合,运用多线程技术,使手机程序在后台运行,拦截监听短信,当捕获含有特殊短信内容的短信时,即唤醒程序,发送使用者的位置告知短信发送人,同时地图还拥有当前位置显示,卫星、街道视图的切换等功能。指南针模块则通过对Android手机底层硬件接口,从传感器探头上获得数据包并处理成可以告知方位的指南针程序。
图1 Android and Google生活辅助系统架构层次图Fig.1 Anroid and Google assisted living system architecture hierarchy diagram
Android中间件是构成Android OS的核心部分,它分为底层的库文件和运行环境,以及上层的应用程序框架,中间件可以称作是连接操作系统与应用程序的纽带,在中间件的底层库与运行环境中,底层库文件包含了轻量级SQLite数据库,媒体框架,System C库文件,外观管理员(surface manager),SGL,SSL,3D函数库与FreeType等库文件。虽然Android平台使用 Java语言编码,却使用自带的 Android Runtime来运行,该Runtime内有2个重要元件,分别是Dalvik Virtual Machine(Dalvik虚拟机器)与Core Libraries(核心函数库)。
核心函数库里包含了绝大多数Java程序语言所需要调用的函数,而每个Android程序都以各自进程来执行,并且都以自属的Dalvik虚拟机器来同时执行,各个程序的执行效率不会受到影响。应用程序框架包含了10个主要的软件元件,如Location Manager(位置管理器)、Activity Manager(程序管理器)、Window Manager(视窗管理器)、Resource Manager(资源管理器)等,便于用户开发不同类型的应用程序,这种框架在移动终端应用程序开发历史上是独有的。在应用程序执行时,通常使用Intent类和IntentFilter类来进行不同窗体之间的切换。在Android.content.Intent包中,一个 Intent描述的是应用程序想做的Active,而IntentFilter表示一个活动能处理的所有Intent。而在界面布局方面,Android的界面,需要写在res/layout的XML里面,一般情况下一个XML对应一个界面。Android界面布局类似于html,要先给Android定框架,然后再在框架里面放控件,Android提供了几种框架类型如下[4]:AbsoluteLayout,RelativeLayout,TableLayout,FrameLayout,LinearLayout(线性布局)。应用程序在Android系统中的生存周期如图2所示。
图2 应用程序在Android系统中的生存周期Fig.2 Life circle of Android application
在Android的SDK文档中显示其系统可支持的传感器类型共有11种[5]。在本程序中使用到的传感器种类有3种:加速度传感器(BMA150 3-axis accelerometer),磁场传感器(AK8973 3-axis magnetic field sensor),方位角传感器(AK8973 orientation sensor)。其中Android提供的API对于不同传感器的调用都是用同一个接口,这样可以利于开发,首先得到传感器的控制,然后再调用感兴趣的感应事件。
注册传感器的方法代码为:mSensorManager.registerListener(mListener,SensorManager.SENSOR_ORIENTATION,SensorManager.SENSOR_DELAY_NORMAL)。
如果想要获得其他感应事件,仅需修改第2个参数为相应的传感器对应的枚举数值,第3个参数是感应事件的频率,设置感应事件频率,有4种频率模式可选,每个频率差为0.04 s。然后设置一个监听器,利用监听接口onSensorChanged来读取具体感应的内容。
本系统开发平台搭建在JDK 1.6.4,Eclipse 3.3(Europa)下,采用的SDK是适用的Android1.6及其以上版本,即SDK Tools中的ADT 0.8.0压缩包。采用C/S系统架构模式,服务器端调用Google Maps地图资源,客户端实现短信监听、接收、发送数据等功能。Android终端服务模式如图3所示。
图3 Android maps服务架构Fig.3 Android maps services architecture
首先,创建了一个MapView后,用户需要用到getController()来获取地图资源的控制,同时通过OverLay在Map上绘制图层信息或者其他信息。又因为这个不是库类的标准包,所以开发者需要在AndroidManifestfile.xml里面添加一个许可认证:〈uses-library Android:name="com.google.Android.maps"/〉。
其次,在Android的定位(Android.location)接口中包含了几个与位置service相关的类,就可以使用这几个服务类来获得Android提供的定向API,同时需要手持移动设备支持GPS模块或者A-GPS。在使用LocationManager来提供定位服务时不会直接提供使用者的坐标情况,首先需要一个句柄,它可以通过系统提供的getSystemService来获得并实现对它的应用。当程序拥有了指向LocationManager的句柄服务时,然后就可以使用下列3个功能:1)搜索LocationManager服务所能给的地理位置坐标;2)注销、释放或者获得LocationProvider提供的地理位置信息;3)当手持移动设备进入某一个活动范围以后,可以激活一个Intent来实现下一个功能模块的设定(在用虚拟机进行开发、模拟时并不能够获取位置信息,通常在制作GIS应用时需使用工程机进行开发)。
Android API支持开发者可以发送和接收SMS消息的应用程序,在对移动设备SMS模块加以开发的过程中需加入〈uses-permission Android:name="Android.permission.READ_SMS"/〉与〈uses-permission Android:name="Android.permission.RECEIVE_SMS"/〉2个许可,通过SmsManager这个类来进行消息的管理和应用,其次在Android设备接收到SMS后,移动设备是pdu(protocol description unit)的形式。而当需要进行SMS相关信息存取的时候,可以使用 Android.telephony.gsm.SmsMessage这个包来进行相关操作。
游泳过程中,上臂旋转外展时,水的阻力会对肩部造成很大的压力。一旦长时间保持不正确的泳姿,会让肩袖处于过度运动状态。几种泳姿比较起来,自由泳、蝶泳和仰泳比较容易出现游泳肩。比如自由泳时,在“拉水阶段”多使用胸肌、阔背肌等内旋转肌,而在“恢复阶段”则多使用三角肌、冈下肌等外旋转肌。通常来说,外旋转肌较薄弱,极容易损伤。而蛙泳的基本姿势确定了其肩部活动的范围较小,因此会好一些。
首先,对接收到的短信还需要进行相关的判断,判断其为正常短信或是含有特殊字符,如果是非正常短信(含有预先设定的特殊字符),首先应对短信进行如下拆分。
其次,在进行SMS匹配成功后对主程序唤起。
Intent mRunPackageIntent=new Intent(context,Gmaps.class);mRunPackageIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)[6];
然后,加载地理位置数据,完毕之后再发送到特殊短信发送者的手中,这样做的好处是对正常短信没有丝毫干扰。
SAX(simple API for XML)是一个公共的基于事件的XML文档解析标准,类似于只读(read-only)和前向(forward-only)游标。在SAX解析器装载XML文件时,它遍历文件文档并在其主机应用程序中产生事件(经由回调函数、指派函数或者任何可调用平台完成这一功能)表示这一过程。由此,编写SAX应用程序就如同采用最现代的工具箱编写GUI程序。大多数SAX实现都会产生以下若干类型的事件,在文档的开始和结束时触发文档处理事件。
在文档内每一XML元素接受解析的前后触发元素事件。任何元数据通常都由单独的事件交付。在处理文档的DTD或Schema时产生DTD或Schema事件。错误事件用来通知主机应用程序解析错误。在处理文档时最重要的就是元素事件,通常SAX解析器会向指定主机甲应用程序提供包含元素信息的事件参数;在最低程度下也会提供元素的名字。具体取决于特定实现,可以定义不同类型的元素事件代表不同类型元素的处理。在项目中,运用它来做Google weather API的解析。其次在开发天气软件时需要一个WEP服务端来提供数据,本程序使用的是Google提供的天气API,然后创建一个Google Weather Handler gwh=new Google Weather Handler();以便解析Google Weather API里面的内容,例如Google服务“Google Weather”的XML文件中:
第1个标记〈weather module_id=“…”〉开始准备读取值—天气信息;第2个标记〈forecast_information〉中的信息是需要获取指定地方的天气情况。按条件读取后可以得到“current_date_time”,“Citiy”,“postal_code”,“forecast_date data”4 条信息。所有〈current_conditions〉标记中的接口名字以及〈forecast_conditions〉按上述方式处理后,再用停词表(stop words list)进行处理,得到表示该WD(Weather-Data)文件特征的关键字集合为WDKeyword=[Get,Weather,Get,City,forecast_date data]。
在WD文件关键字集合的基础上,可以定义WD文件的向量为
(2)式中:TFi为单个关键词包所含信息[8]。值得注意的是,需要在程序的开始引用JAVA的网络包import java.net.URL 和 import java.net.URLCon-nection以及使用SAX解析器的时候需要用到的import javax.xml.parsers.SAXParser和 import javax.xml.parsers.SAXParserFactory[9]。
在如上所述的环境、设计和开发规程步骤情况下实现了生活即时助手,其功能描述如下所述。
1)基于Google Maps开发的M-GIS信息服务实时当前位置查询、周边情况、地点查询,如图4—5所示。并能通过2种方式进行定位:一种是A-GPS(assisted GPS);另一种是移动位置服务(location based service,LBS)方式。
2)对手机SMS模块和Google Maps模块加以整合开发,用后台线程监听的方式,实现程序保持线程状态进行多点动态监听含有特殊字符短信,并在调用程序后发送当前移动设备位置坐标,实现程序的后台接收,自动反馈功能,如图6所示。
3)通过对气象网站XML文档的解析实现网络在线分析文档,反馈实时气候信息条件,并反馈出地理位置所在地的详细天气情况,如图7所示。
Android系统网络集成性很高,内部集成了大量的Google应用,涵盖了生活中各个方面的网络应用,对长期使用网络,信息依赖度比较高的人群很合适。开发的“基于Android系统的生活即时助手”是为了方便那些爱好外出游玩的人群,使他们在外出旅游时可以让亲友及时了解位置,也可以通过指南针、地图、天气等服务综合了解当时所处的状况,自我进行判断、处理问题。把程序整合到手机设备上主要是利用了移动设备的便携性,为人们的日常生活带来更多的便利。
[1]KUMAR S,QADEER M A,GUPTA A.Location based services using android(LBSOID)[C]//IEEE.2009 IEEE International Conference on Internet Multimedia Services Architecture and Applications(IMSAA).Bangalore:IEEE Press,2009:1-5.
[2]SHU Xian-hua,DU Zhen-jun,CHEN Rong.Research on Mobile Location Service Design Based on Android[C]//IEEE.WiCom'09.5th International Conference on Wireless Communications,Networking and Mobile Computing.Beijing:IEEE Press,2009:1-4.
[3]LI Xu-dong,YAN Gao-shi,TANG Hai.Android Based Wireless Location and Surrounding Search System Design[C]//2010 Ninth International Symposium on Distributed Computing and Applications to Business Engineering and Science(DCABES).Hong Kong:IEEE Press,2010:421-423.
[4]廖军,郭达.移动互联网应用趋势—基于Web的终端平台[J].信息通信技术,2010,17(04):20-23.LIAO Jun,GUO Da.Application of mobile Internet trends terminals based on Web platform[J].Information and communication technology,2010,17(04):20-23.
[5]裴春梅,杨秀清,王贵明.传感器在智能手机中的应用[J].湖南农业大学学报:自然科学版,2009,35(10X):108-109.PEI Chun-mei,YANG Xiu-qing,WANG Gui-ming.The sensor in the intelligent mobile phone application[J].Journal of Hunan Agricultural University:Natural Science Edition,2009,35(10X):108-109.
[6]彭璇,吴肖.Google Map API在网络地图服务中的应用[J].测绘信息与工程,2010,35(01):25-27.PENG Xuan,WU Xiao.Google Map API in the network map service application[J].Engineering of Surveying and mapping,2010,35(01):25-27.
[7]费洪晓,康松林,朱小娟,等.基于词频统计的中文分词的研究[J].计算机工程与应用,2005,41(07):67-68.FEI Hong-xiao,KANG Song-lin,ZHU Xiao-juan,et al.Based on word frequency statistics of Chinese word segmentation research[J].Computer engineering and applications,2005,41(07):67-68.
[8]孟德欣,谢二莲.使用Google XML APIs Service实现Web查询[J].计算机应用研究,2004,24(z1):252-253.MENG De-xin,XIE Er-lian.Google XML APIs Service.Use Web query[J].Application Research of computers,2004,24(z1):252-253.
[9]阎啸天武穆清.辅助定位卫星多普勒频移特性[J].北京邮电大学学报,2009,32(2):66-70.YAN Xiao-tian WU Mu-qing.The auxiliary positioning satellite Doppler shift characteristics[J].Journal of Beijing University of Posts and Telecommunications,2009,32(2):66-70.