您的位置:首页 > 移动开发 > Android开发

Android之GPS定位详解

2015-04-13 16:50 471 查看
一、LocationManager

LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。

LocationManger
locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

二、LocationListener

LocationListener,位置监听,监听位置变化,监听设备开关与状态。

private LocationListener
locationListener=new LocationListener()
{

public void onLocationChanged(Location
location) {

updateView(location);

Log.i(TAG,
"时间:"+location.getTime());

Log.i(TAG,
"经度:"+location.getLongitude());

Log.i(TAG,
"纬度:"+location.getLatitude());

Log.i(TAG,
"海拔:"+location.getAltitude());

}

public void onStatusChanged(String
provider, int status,
Bundle extras) {

switch (status)
{

//GPS状态为可见时

case LocationProvider.AVAILABLE:

Log.i(TAG,
"当前GPS状态为可见状态");

break;

//GPS状态为服务区外时

case LocationProvider.OUT_OF_SERVICE:

Log.i(TAG,
"当前GPS状态为服务区外状态");

break;

//GPS状态为暂停服务时

case LocationProvider.TEMPORARILY_UNAVAILABLE:

Log.i(TAG,
"当前GPS状态为暂停服务状态");

break;

}

}

public void onProviderEnabled(String
provider) {

Location
location=lm.getLastKnownLocation(provider);

updateView(location);

}

public void onProviderDisabled(String
provider) {

updateView(null);

}

};

三、Location

Location,位置信息,通过Location可以获取时间、经纬度、海拔等位置信息。上面采用locationListener里面的onLocationChanged()来获取location,下面讲述如何主动获取location。

Location
location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

system.out.println("时间:"+location.getTime());

system.out.println("经度:"+location.getLongitude());

注意:Location
location=new
Location(LocationManager.GPS_PROVIDER)方式获取的location的各个参数值都是为0。

四、GpsStatus.Listener

GpsStatus.Listener
,GPS状态监听,包括GPS启动、停止、第一次定位、卫星变化等事件。

//状态监听

GpsStatus.Listener listener
= new GpsStatus.Listener()
{

public void onGpsStatusChanged(int event)
{

switch (event)
{

//第一次定位

case GpsStatus.GPS_EVENT_FIRST_FIX:

Log.i(TAG,
"第一次定位");

break;

//卫星状态改变

case GpsStatus.GPS_EVENT_SATELLITE_STATUS:

Log.i(TAG,
"卫星状态改变");

//获取当前状态

GpsStatus
gpsStatus=lm.getGpsStatus(null);

//获取卫星颗数的默认最大值

int maxSatellites
= gpsStatus.getMaxSatellites();

//创建一个迭代器保存所有卫星

Iteratoriters = gpsStatus.getSatellites().iterator();

int count
= 0;

while (iters.hasNext()
&& count <= maxSatellites) {

GpsSatellite
s = iters.next();

count++;

}

System.out.println("搜索到:"+count+"颗卫星");

break;

//定位启动

case GpsStatus.GPS_EVENT_STARTED:

Log.i(TAG,
"定位启动");

break;

//定位结束

case GpsStatus.GPS_EVENT_STOPPED:

Log.i(TAG,
"定位结束");

break;

}

};

};
//绑定监听状态

lm.addGpsStatusListener(listener);

五、GpsStatus

GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。

//实例化

GpsStatus gpsStatus =
locationManager.getGpsStatus(null); // 获取当前状态

//获取默认最大卫星数

int maxSatellites
= gpsStatus.getMaxSatellites();

//获取第一次定位时间(启动到第一次定位)

int costTime=gpsStatus.getTimeToFirstFix();

//获取卫星

Iterableiterable=gpsStatus.getSatellites();

//一般再次转换成Iterator

Iteratoritrator=iterable.iterator();

六、GpsSatellite

GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。

//获取卫星

Iterableiterable=gpsStatus.getSatellites();

//再次转换成Iterator

Iteratoritrator=iterable.iterator();

//通过遍历重新整理为ArrayList

ArrayListsatelliteList=new ArrayList();

int count=0;

int maxSatellites=gpsStatus.getMaxSatellites();

while (itrator.hasNext()
&& count <= maxSatellites) {

GpsSatellite satellite =
itrator.next();

satelliteList.add(satellite);

count++;

}

System.out.println("总共搜索到"+count+"颗卫星");

//输出卫星信息

for(int i=0;i

//卫星的方位角,浮点型数据

System.out.println(satelliteList.get(i).getAzimuth());

//卫星的高度,浮点型数据

System.out.println(satelliteList.get(i).getElevation());

//卫星的伪随机噪声码,整形数据

System.out.println(satelliteList.get(i).getPrn());

//卫星的信噪比,浮点型数据

System.out.println(satelliteList.get(i).getSnr());

//卫星是否有年历表,布尔型数据

System.out.println(satelliteList.get(i).hasAlmanac());

//卫星是否有星历表,布尔型数据

System.out.println(satelliteList.get(i).hasEphemeris());

//卫星是否被用于近期的GPS修正计算

System.out.println(satelliteList.get(i).hasAlmanac());

}

为了便于理解,接下来模拟一个案例,如何在程序代码中使用GPS获取位置信息。

第一步:新建一个Android工程项目,命名为mygps,目录结构如下





第二步:修改main.xml布局文件,修改内容如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: