Android手机定位信息采集及上传软件设计与实现

2015-01-20 05:12何晓东
电脑知识与技术 2014年36期

摘要:该文叙述Android手机定位信息的采集和发送软件的设计,并使用JAVA语言编程实现。测试显示达到设计要求。

关键词: GPS; TCP; Socket; Android

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)36-8646-02

1 背景

随着技术发展和成本的降低,智能手机快速普及。大量智能手机采用ANDORID操作系统、具备GPS定位功能。手机用户可以下载安装地图软件便能在手机显示屏上显示手机所在地理位置,进一步可以进行导航等,这大大方便了人们的生活。

2 应用需求及分析

某些应用需要定时获取人员的位置并能在管理中心的计算机地图上显示,管理中心可以了解人员的位置根据需要进行工作调度。人员的位置信息可以通过该人员所持智能手机获得,通过开发相应的软件定期读取人员智能手机的地理位置信息并传送到指定管理中心的服务器,开发软件使管理中心能在地图上显示手机的位置。软件由手机客户端软件和服务器端软件两个部分组成,手机客户端软件应实现:能将手机的定位信息取出并通过手机网络发送到指定的服务器。服务器端软件应实现:接收存储手机发送的定位数据,并在地图上显示人员的位置。该文只涉及手机客户端软件。

3 软件设计

功能要求: 根据需求, 手机客户端软件主要实现两个功能:1) 获取手机定位信息功能: 能够读取手机内置的GPS定位数据;2) 数据发送功能: 能将读取的GPS定位数据发送到指定的主机。

性能要求: 1) 每隔30秒采集并发送定位信息;2) 定时时间、主机地址等参数用户可以进行设置。

4 软件架构

手机客户端软件由人机界面层、界面维护层、业务层,数据接入层构成。如图1所示。

图1 软件结构

4.1界面层

进行人机交互,界面如图2所示。

图2 UI 界面设计

显示用户填写的系统参数条目,包含服务器地址(IP)、服务器端口、更新时间、用户识别码,通过勾选可以启动或停止定位跟踪服务,接收用户的输入。可以显示所处位置的经度和纬度信息。用户可以点击“保存配置”按钮保存填写的参数(调用界面支持模块等),以后运行程序无需重复设置。启动定位跟踪服务后,用户可以点击”退出”按钮退出应用程序。

4.2界面维护层

同页面”保存配置”按钮对应,调用数据接入层模块执行用户参数读写;更新界面上显示的经度和纬度信息;对应界面上”退出”按钮,实现程序退出功能。

4.3业务层

封装成一个服务,含GPS信息获取模块和GPS信息发送模块,分别实现GPS信息的读取和GPS信息的上传功能.GPS信息获取模块读取内置GPS定位信息,获取其中纬度和经度信息并转换成字符串,形成信息帧,调用发送模块的发送功能发送到信息帧到服务器;同时通过广播事件进行位置信息扩散,以便界面维护层能接收新的位置信息及时更新界面上显示的经度和纬度信息。

4.4数据接入层

系统参数保存在文件中,数据接入层实现对文件中信息的读写。

5 关键技术及代码

软件采用eclipse+adt开发,界面ACTIVITY 由xml进行定义,使用了TextView,EditView,CheckBox等页面元素,采用线性页面布局,使用TableRow进行定位。客户端程序核心功能是获取GPS定位信息、发送定位信息到服务器。

5.1 GPS信息获取

调用了系统定位服务,设置定位参数,核心代码如下:

//获得定位服务管理器 lm=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE); //设置定位参数

Criteria criteria = new Criteria();

// 查询精度:高

criteria.setAccuracy(Criteria.ACCURACY_FINE);

// 是否查询海拨:否

criteria.setAltitudeRequired(false);

// 是否查询方位角 : 否

criteria.setBearingRequired(false);

// 是否允许付费:否

criteria.setCostAllowed(false);

// 电量要求:低

criteria.setPowerRequirement(Criteria.POWER_LOW);

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

location= lm.getLastKnownLocation(bestProvider);

//设置定期更新位置信息 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,10,locationListener);

//设置位置监听器,接收位置信息

private LocationListener locationListener = new LocationListener() {

// 位置发生改变后调用

public void onLocationChanged(Location l) {

if(l!=null){

location=l;}}

5.2 定位信息发送给服务器

手机客户端采用TCP/IP协议同计算机服务器通信,使用socket编程发送定位数据。核心代码如下:

try

{//创建Socket

SocketAddress address = new InetSocketAddress(serverIP, serverPORT);

Socket socket = new Socket();

socket.connect(address,DefalutWaitTime);

// 获取socket的输出流并包装成PrintWriter

if (socket.isConnected()) {

PrintWriter out = new PrintWriter(new OutputStreamWriter(

socket.getOutputStream()));

//输出

out.println(localinfor);

//关闭出流

out.println("bye");

out.close();

//关闭Socket

socket.close();

}}

catch (Exception e)

{// TODO: 处理异常

System.out.println( e.toString());}

6 测试

测试用手机操作系统是android4.2,安装开发的客户端软件,设置手机通过wlan接入内网,使用内网进行测试,服务器通过网线接入内网。手机运行程序,设置服务器地址:10.24.21.3,端口8000,更新周期为10秒,用户识别码为:10001,启动定位跟踪服务后 ,手机界面显示如图3所示。显示读出的地理位置GPS坐标为纬度:117.36654106,经度:31.93015923。

图3 手机运行显示界面截图

在服务器端接收程序接收到手机发送的定位信息,如图4所示。

图4 服务器端定位信息接收界面截图

服务器地图显示效果如图5所示。

图5 服务器端定位信息在地图上显示截图

地图显示位置正确。

7 小结

通过ANDROID手机定位信息采集及上传软件开发测试,了解了ANDROID 应用开发的过程和特点,实现了GPS定位信息的读取和上传定位信息到服务器端功能,对相关技术进行了验证,为后期ANDROID应用开发打下良好的基础。

参考文献:

[1] 张冬玲. Android应用开发教程[M].北京:清华大学出版社,2013.

[2] 董迎红,王薇.Java程序设计案例教程与实训[M]. 北京:北京大学出版社,2011.

[3] http://www.cnblogs.com/fly_binbin/archive/2010/12/16/1908518.html.

//设置位置监听器,接收位置信息

private LocationListener locationListener = new LocationListener() {

// 位置发生改变后调用

public void onLocationChanged(Location l) {

if(l!=null){

location=l;}}

5.2 定位信息发送给服务器

手机客户端采用TCP/IP协议同计算机服务器通信,使用socket编程发送定位数据。核心代码如下:

try

{//创建Socket

SocketAddress address = new InetSocketAddress(serverIP, serverPORT);

Socket socket = new Socket();

socket.connect(address,DefalutWaitTime);

// 获取socket的输出流并包装成PrintWriter

if (socket.isConnected()) {

PrintWriter out = new PrintWriter(new OutputStreamWriter(

socket.getOutputStream()));

//输出

out.println(localinfor);

//关闭出流

out.println("bye");

out.close();

//关闭Socket

socket.close();

}}

catch (Exception e)

{// TODO: 处理异常

System.out.println( e.toString());}

6 测试

测试用手机操作系统是android4.2,安装开发的客户端软件,设置手机通过wlan接入内网,使用内网进行测试,服务器通过网线接入内网。手机运行程序,设置服务器地址:10.24.21.3,端口8000,更新周期为10秒,用户识别码为:10001,启动定位跟踪服务后 ,手机界面显示如图3所示。显示读出的地理位置GPS坐标为纬度:117.36654106,经度:31.93015923。

图3 手机运行显示界面截图

在服务器端接收程序接收到手机发送的定位信息,如图4所示。

图4 服务器端定位信息接收界面截图

服务器地图显示效果如图5所示。

图5 服务器端定位信息在地图上显示截图

地图显示位置正确。

7 小结

通过ANDROID手机定位信息采集及上传软件开发测试,了解了ANDROID 应用开发的过程和特点,实现了GPS定位信息的读取和上传定位信息到服务器端功能,对相关技术进行了验证,为后期ANDROID应用开发打下良好的基础。

参考文献:

[1] 张冬玲. Android应用开发教程[M].北京:清华大学出版社,2013.

[2] 董迎红,王薇.Java程序设计案例教程与实训[M]. 北京:北京大学出版社,2011.

[3] http://www.cnblogs.com/fly_binbin/archive/2010/12/16/1908518.html.

//设置位置监听器,接收位置信息

private LocationListener locationListener = new LocationListener() {

// 位置发生改变后调用

public void onLocationChanged(Location l) {

if(l!=null){

location=l;}}

5.2 定位信息发送给服务器

手机客户端采用TCP/IP协议同计算机服务器通信,使用socket编程发送定位数据。核心代码如下:

try

{//创建Socket

SocketAddress address = new InetSocketAddress(serverIP, serverPORT);

Socket socket = new Socket();

socket.connect(address,DefalutWaitTime);

// 获取socket的输出流并包装成PrintWriter

if (socket.isConnected()) {

PrintWriter out = new PrintWriter(new OutputStreamWriter(

socket.getOutputStream()));

//输出

out.println(localinfor);

//关闭出流

out.println("bye");

out.close();

//关闭Socket

socket.close();

}}

catch (Exception e)

{// TODO: 处理异常

System.out.println( e.toString());}

6 测试

测试用手机操作系统是android4.2,安装开发的客户端软件,设置手机通过wlan接入内网,使用内网进行测试,服务器通过网线接入内网。手机运行程序,设置服务器地址:10.24.21.3,端口8000,更新周期为10秒,用户识别码为:10001,启动定位跟踪服务后 ,手机界面显示如图3所示。显示读出的地理位置GPS坐标为纬度:117.36654106,经度:31.93015923。

图3 手机运行显示界面截图

在服务器端接收程序接收到手机发送的定位信息,如图4所示。

图4 服务器端定位信息接收界面截图

服务器地图显示效果如图5所示。

图5 服务器端定位信息在地图上显示截图

地图显示位置正确。

7 小结

通过ANDROID手机定位信息采集及上传软件开发测试,了解了ANDROID 应用开发的过程和特点,实现了GPS定位信息的读取和上传定位信息到服务器端功能,对相关技术进行了验证,为后期ANDROID应用开发打下良好的基础。

参考文献:

[1] 张冬玲. Android应用开发教程[M].北京:清华大学出版社,2013.

[2] 董迎红,王薇.Java程序设计案例教程与实训[M]. 北京:北京大学出版社,2011.

[3] http://www.cnblogs.com/fly_binbin/archive/2010/12/16/1908518.html.