基于Android智能手机的GPS功能移动应用开发与测试

当前国内外基于位置的服务开展如火如荼,在手机上拓展GPS功能己成为移动应用开发的一个热点。本文针对Android智能手机GPS功能进行移动应用开发,利用Android丰富的APIs,通过android.location软件包获取定位的位置数据,对手机进行实时定位,并通过GPRS将位置数据传到服务器,进行实时监控。测试应用结果表明,手机定位软件运行良好,能够很好地达到实时监测、干预、调控、预警人员的目的。

4. 软件详细设计

4.1. 定位实现

4.1.1. GPS定位前提

使用Android智能机自带的GPS,首先要在手机的“设置”中“位置服务”中勾选“GPS卫星”。此外为了能够让应用程序获取定位服务的能力,程序中还需要添加如下两种定位服务权限:

4.1.2. Android定位API

Android关于地理定位的API主要集中在android. location软件包内[4]。本设计基于GPS定位实现定位功能,两个重要的类是LocationManager类和Location Provider类[5]。LocationManager类是定位服务最主要的类,负责定位服务管理,包括获取定位数据、读取GPS状态等,Location Manager的对象不需要实例化,而是通过获取系统服务来实现的[2],用到Location Manager类中的方法主要如表1所示。LocationPro- vider类用来描述位置提供者,设置位置提供者的一些属性,通过Criteria类来为LocationProvider类设置条件,获得合适的LocationProvider。 4.1.3. 编程实现

Android的线程分为两类:主线程和子线程。当

Table 1. The functions about positioning

表1. 定位有关的方法 方法名称 功能说明

isProviderEnable方法

获取位置提供者是否使能。

用于获取Android系统中最新保存的位置信息,其中包含了经纬度等位置数据,程getLastKnownLocation

序中通过解析该返回值便可以获取位置信方法

息,通过该方法主动地获取GPS定位的位置信息,但该数据并一定代表实时的定位

数据。 用于向Android系统请求位置更新,当用requestLocationUpdates

户的位置更新时将及时获取最新的定位数方法

据,该方法获得位置更新的方式可以有很

多种,如监听器、Intent等。 用于移除Android系统的位置更新请求,removeUpdates方法

这样,当用户的位置更新时将不再获取最

新的定位数据。

Copyright © 2013 Hanspub 一个应用程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程,默认情况下,所有该程序的组件都将在该进程和线程中运行[6]。主线程主要负责处理与UI相关的事件,并把相关的事件分发到对应的组件进行处理,如果在主线程中占用太长的时间话,就会引发ANR(应用程序无响应)对话框,此时需要把一些耗时操作如访问网络或数据库等放到一个新的子线程中进行[6],并通过使用Android提供Handler类实现主线程和子线程之间数据的交换。

手机定位软件采用多线程技术,在主线程中创建一个handler对象用handlerMessage方法接收子线程中的消息和用postDelayed方法发Runnable对象到主线程中,通过重载Runnable对象的run方法实现定时定位,在子线程中创建Socket与PC平台进行通信。定时定位程序流程图如图4所示。

4.2. Socket通信

4.2.1. Socket简介

阅读剩余
THE END