基于百度地图和定位技术对手机通讯录管理方案
2017-04-15罗玲彭诚
罗玲+彭诚
摘要:该文设计了一种基于百度地图对Android系统智能手机通讯录管理方案。该方案首先查询获得电话号码的归属地信息,然后将通讯录按照相同归属地分组显示,之后再利用百度地图位置定位功能,在地图上显示出各个城市联系人分布,并可进一步查看手机通讯录中联系人具体位置。通过定位功能,随时获取手机持有者的当前位置,并显示出通讯录中当前位置附近有哪些联系人。与此同时,再给出智能提示,并通过地图信息查看从自己当前位置到所要去的联系人位置的具体路线信息等。该方案对手机通讯的信息进行有效管理,为手机用户好友间联系、聚会以及其他日常生活带来便利。
关键词:Android系统;手机通讯录;百度定位;百度地图
中图分类号:TP311.5 文献标识码:A 文章编号:1009-3044(2016)34-0108-04
Abstract: This paper designs a scheme of smart phone address book management based on baidu map. Firstly, it inquires number attribution, then, it divides the address book into groups according to number attribution. After that, it shows cities contact distribution on the map by using the positioning function of the Baidu map. Furthermore, it can look over the location of the mobile phone contact. It can show the holders current location and show who is nearby in the mobile phone address book contacts. At the same time, it can give Smart tips and show the specific routes between your current location and the contacts nearby. In a word, the scheme brings much convenience to communication, meeting and other daily life by managing mobile communication information effectively.
Key words: Android system; phone contact; Baidu map; Baidu positioning
1 背景
定位技术和地图技术已经被广泛应用车载,通信等行业,尤其是近年来蓬勃发展的Android操作系统平台下的应用,如电子地图、导航、地理位置服务(LBS)等。目前,搭载Android操作系统的智能手机是当前手机行业的主要阵营之一。在手机的应用软件中,通讯录软件是任何手机都离不开的重要应用。通讯录存储了联系人姓名,电话,地址等信息。结合当前“数据化”,“信息化”的发展背景,如何对手机通讯的信息进行有效管理,这对提高用户办公效率以及生活便利等方面都具有重要意义,例如用户在出差或者旅游时及时查看当地的联系人情况,更好进行活动安排等。
2 总体目标
基于电话号码归属地查询可以判断出联系人所在的城市这一前提条件,并结合Android平台下百度定位技术和地图技术,实现对Android手机通讯录信息管理。通过查询通讯录中联系人电话、手机号码归属地,将通讯录按照号码归属地重新分组。借助百度地图功能,在地图上显示全国城市联系人的分布。通过定位功能,随时可以知道自己当前所在位置,并顯示出通讯录中当前位置附近有哪些联系人。以及通过地图信息查看从自己当前位置到所要去的联系人位置的具体路线信息。
3 方案设计
为达到以上目标,对手机通讯录管理方案设计如下图所示:
软件功能共分为五个模块,包括:按城市查询联系人,在地图上显示全国各个城市联系人的分布,定位自己当前位置,路线提示和消息提示。按城市查询联系人,通过查询通讯录中联系人手机号码归属地,按照归属地城市对通讯录联系人重新分组。并且使用者可输入城市关键字查询该城市的联系人有哪些。
地图位置显示,基于百度地图功能[1],在地图上显示全国城市联系人的分布。点击可查看联系人在地图上的具体位置。
定位自己当前位置,基于百度地图定位功能,随时随地可以知道自己当前所在位置,并显示出通讯录中当前位置附近有哪些联系人,给出消息提示。
路线提示,提示自己当前所在位置,附近的联系人。通过地图信息查看从自己当前位置到所要去的联系人位置的具体路线信息。
4 软件详细设计
实现按城市查询联系人功能,首先需要获取手机通讯录信息数据。然后对获得的数据中的电话、手机号码进行号码归属地查询。再按照归属地城市进行分类。最后将分类结果显示出来。
用户可按照城市查询该城市有哪些联系人。打开联系人,可查看联系人具体信息,并且可编辑联系人具体地址保存。流程图如下图所示:
地图位置显示功能,根据联系人的具体地址信息,打开地图功能,在地图上显示各个城市联系人总数。如果联系人的具体地址在数据库中存在,则软件可根据具体地址信息,在地图上显示出其所在的位置。
定位当前位置功能,定位用户当前所在的城市和具体位置。通过对比当前城市和数据库中的号码归属地信息,查找出当前城市的所有联系人并显示出来。
消息提示功能,提示自己当前所在位置,以及当前位置附近通讯录中有哪些联系人,是否需要联系。
查看详细信息,通过地图功能查看自己当前位置以及该城市所有联系人的位置。并给出路线提示,提示自己当前位置到联系人位置的路线信息。
5 关键技术
5.1 电话号码归属地查询
将通讯录中手机、电话号码按照归属地分组,关键技术在于号码归属地查询。归属地查询一般可以通过联网查询和匹配本机归属地数据库两种方法。为了避免过于增加本地数据库容量而增大安装包大小,本软件采用联网查询的方法。
联网查询主要是通过Webservice来实现。Webservice是一个应用组件,可以为其他应用程序提供数据和服务。各应用程序通过网络协议和规定的一些标准数据格式(HTTP、XML、SOAP)来访问webservice,通过WebService内部执行得到所需数据结果。
首先,获取手机通讯录信息。在Android平台上手机联系人信息存储在系统自带的SQLite数据库中,要获得联系人电话号码就要访问contacts.db数据库,访问数据库前需要设置应用程序读取联系人权限。
然后,查询号码归属地信息。通过http请求访问远端的“webservice.webxml.com.cn”提供的国内手机号码归属地查询WebService服务,向其发送封装了电话号码的XML格式数据。WebService服务提供了getMobileCodeInfo 方法,通过执行它可以获得国内手机号码归属地省份、地区和手机卡类型信息,并且将查询结果以XML形式返回。getMobileCodeInfo方法需要数据输入参数,参数包括:mobileCode ,字符串(手机号码,最少前7位数字);userID, 字符串(商业用户ID) 免费用户为空字符串。通过该方法可以得到返回数据,包括手机号码,省份, 城市, 手机卡类型等信息。
5.2 地图显示
Android平台上地图开发,地图SDK可选择google地图、高德地图、百度地图等。Google Map是Google公司提供的电子地图服务,采用的是gps坐标系,具有稳定,卫星地图精细的优势,但手机必须要有Google Service Framework支持。高德地图,采用火星坐标系(gcj),支持全球定位,但卫星地图不够精细。百度地图采用百度坐标系,相对来说稳定性更好,支持全球定位,功能迭代较快,地图数据加载快。所以本方案中选择百度地图SDK作为地图开发SDK。百度地图Android SDK是一套基于Android2.1及以上版本设备的应用接口,可使用该套SDK开发适用于Android系统移动设备的地图应用。[2]通过调用地图SDK接口,访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。
百度地图SDK按功能可分为:地图功能、检索功能、LBS云检索、计算工具和周边雷达五个部分。地图功能提供了地图的展示和缩放、平移、旋转、改变视角等地图操作。本软件通过百度地图提供的API,实现在地图上显示各个城市的联系人分布,点击可查看联系人在地图上的详细位置。百度地图应用程序的开发需要设置布局文件权限、添加jar包以及显示百度地图的控件几个步骤实现[2]。具体介绍如下:
在使用百度地图之前,必须先申请一个百度地图的API key。然后下载百度地图API开发包,并在工程中引入。在Eclipse工程中,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下。在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。 通过以上两步操作后,完成Android应用程序工程的配置。还需要在应用程序的AndroidManifest文件中添加开发密钥、所需权限等信息。至此,就可以利用SDK提供的接口,獲取地图数据了。
百度地图一些重要的类和对象见下表:
MapView继承于Android SDK的ViewGroup类,作为显示地图UI控件,负责从百度地图服务端获取地图数据。BaiduMap,通过Mapview的getMap()方法可以得到百度地图最核心的组件BaiduMap[3] [4],它是一个地图控制器,负责对地图、覆盖物以及图层进行渲染,定义百度地图相关操作,并对用户交互事件进行监听。这些监听接口包括了:地图单击事件监听接口,双击事件监听接口,地图绘制回调接口,地图加载完成回调接口,地图长按事件监听接口,地图状态改变相关接口等,通过实现这些接口就可以实现应用程序所需的地图功能。
5.3 位置定位
Android平台上定位的实现方案可以有多种选择,包括GPS定位,基站定位,WIFI热点定位。利用智能手机上的GPS或者移动网络可以轻松的得到当前所处的位置信息。
本方案采用基于百度地图的定位服务。百度地图Android定位SDK支持Android设备应用程序接口。通过百度地图API可以构建强交互性应用,同时还可以实现定位、本地搜索,路线规划等数据服务[5]。实现定位功能,通过设备当前GPS信息、网络定位(WIFI、基站)混合定位模式,返回当前所处的位置信息。通过反地理编码功能,解析当前所处的位置坐标,获得详细地址描述信息。它与百度地图配合使用,可以在地图上展示实时位置信息。其工作的详细流程如下图:
当应用程序向定位SDK发起定位请求时,定位SDK会根据应用的定位因素(GPS、基站、Wi-Fi信号)的实际情况(如是否开启GPS、是否连接网络、是否有信号等)来生成相应定位依据进行定位[2]。然后定位SDK会根据生成的定位依据向定位服务器发送网络请求。定位服务器会根据请求的定位依据推算出对应的坐标位置,生成定位结果返回给定位SDK。
定位服务客户端一些重要的类和方法如下表所示:
LocationClient类是定位服务客户端的一个重要的类。LocationClient类必须在主线程中声明,它需要Content类型的参数。Content需要全进程有效的content,推荐用getApplicationContent获取全进程有效的Content。LocationClient需要注册一个BDLocationListener监听接口的具体实现类,在这个实现类里,可以自定义对返回结果的处理。在开启定位之前,需要对定位客户端设置定位参数,定位参数包括:定位模式(高精度定位模式,低功耗定位模式和仅用设备定位模式),返回坐标类型,是否打开GPS等。LocationOption对相关的定位参数进行了封装,利用它提供的set方法进行参数设置。分别使用public void start()和public void stop() 来打开或關闭LocationClient ,调用public intrequestLocation( ) 方法来发起定位。发起定位后,定位客户端异步获取当前位置。定位结果在BDLocationListener的onReceiveLocation方法的参数中返回。
6 结束语
本文提出了一种对Android智能手机通讯录管理方案,并详细介绍了软件实现的过程和关键技术。方案将Android智能手机中的联系人信息按照号码归属地分类,在地图上显示出各个城市联系人的具体位置。再通过定位功能,定位自己当前位置,并给出当前位置附近的联系人有哪些,以及从自己当前位置到联系人位置的路线。实现该方案最主要的是基于百度地图和百度定位SDK进行二次开发。百度地图SDK提供了多种方法,功能丰富,具有较大的可扩展性。借助百度地图成熟的地图服务框架快速搭建自己的地图应用,可以大大降低开发成本、开发时间以及对本地服务器的硬件要求,将更多的注意力聚焦于自身的业务系统。在软件即服务的软件应用模式下,百度地图SDK以一种更加开放的姿态走向个人和企业,为移动应用的发展开拓了新的方向。
参考文献:
[1] 杜传明. 百度地图API在小型地理信息系统中的应用[J]. 测绘与空间地理信息, 2011, 34(2): 152-153.
[2] 百度. 百度地图API开发指南
[EB/OL]. [2014-06]. http://lbsyun.baidu.com/index.php?title=androidsdk/guide/basicmap.
[3] 朱根荣. 百度地图API应用数例[J].电脑编程技巧与维护, 2013(23).
[4] 程志平. 如何构建一个基础的百度地图页面[J]. 数字化用户, 2013(28).
[5] 施连敏, 盖之华. 基于Android的百度地图应用的搭建[J]. 技术开发, 2014(12).