首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android LocationManager 应用

2012-09-27 
Android LocationManager 使用前一阵子,老大安排我写一个GPS的程序。大致就是用Android 提供的Location 服

Android LocationManager 使用

前一阵子,老大安排我写一个GPS的程序。大致就是用Android 提供的Location 服务,来获得当前的位置信息和卫星信息。这里就用到了LocationManager类,要使用它,先得获得系统所提供的location_service

private LocationManager locationManager;

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

要实时的得到位置信息,得注册一个location的listener。

private LocationListener locationListener;

locationManager.requestLocationUpdates(“gps”, 1000, 0, locationListener); 每秒更新位置信息,不考虑距离变化。

locationManager.removeUpdates(locationListener); 移除listener

在使用这个locationListener之前,还得先new一下,在位置信息更新时要做的操作都可以在这里实现

locationListener = new LocationListener()

{
?????? // implement necessary methods
?????? public void onLocationChanged(Location location)
?????? {
??????????? // TODO Auto-generated method stub

??????????? 位置信息更新
??????? }

?????? public void onProviderDisabled(String provider)
?????? {
??????? // called when the provider be disabled by user


?????? }

?????? public void onProviderEnabled(String provider)
?????? {
??????? // called when the provider be enabled
??????? }

?????? public void onStatusChanged(String provider, int status, Bundle extras)
?????? {
??????? // TODO Auto-generated method stub

???????? provider状态改变
??????? }
????? };

要得到位置信息,也可以单独调用getLastKnownLocation

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

位置信息中包含着 经纬度,高度,速度,UTC时间,定位精度等有用的信息。

得到了位置信息,下面来看卫星信息。Android下提供了GpsStatus这个类,通过调用此类的一个method? getSatellites() ,可以得到接收到的卫星的信息列表Iterable<GpsSatellite> 。当然这些操作也是在一个listener当中来做的:GpsStatus.Listener。GpsStatus的listener也是注册于locationManager:
private GpsStatus.Listener statusListener;

locationManager.addGpsStatusListener(statusListener);

locationManager.removeGpsStatusListener(statusListener);

初始化并实现更新时相应的操作:

private GpsStatus gpsStatus;

statusListener = new GpsStatus.Listener()?

{
??? public void onGpsStatusChanged(int event)
??? {
???? // TODO Auto-generated method stub
???? gpsStatus= locationManager.getGpsStatus(null);
????
???? switch(event)
???? {
???? case GPS_EVENT_FIRST_FIX:
????????????? //第一次定位时间UTC

????????????? gpsStatus.getTimeToFirstFix();?????

????? break;
?????
???? case GPS_EVENT_SATELLITE_STATUS:

???????????? //得到所有收到的卫星的信息,包括 卫星的高度角、方位角、信噪比、和伪随机号(及卫星编号)
????? Iterable<GpsSatellite> allSatellites;
????? allSatellites = gpsStatus.getSatellites();
????
????? break;
?????
???? case GPS_EVENT_STARTED:
???????????? //Event sent when the GPS system has started.

???? break;
?????
???? case GPS_EVENT_STOPPED:
??????????? //Event sent when the GPS system has stopped.
????? break;
?????
???? default :
????? break;
???? }
??? }


};

?

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/saint_bxg/archive/2009/07/07/4329008.aspx

1 楼 倒打一耙 2010-09-15   你好,我想问一下,那个LocationManager中的requestLocationUpdates()方法中的四个参数,第一个和最后一个分别是定位方法和回调函数,但是第二个和第三个含义有些模糊,第二个是时间间隔是每隔多久做一次定位,调用一下回调函数么?而第三个参数是距离条件,是没变化多少米调用一下回调函数还是说在这么远距离之内,那个时间间隔才有效? 2 楼 倒打一耙 2010-09-15   locationManager.requestLocationUpdates(“gps”, 1000, 0, locationListener); 每秒更新位置信息,不考虑距离变化。看了你的这个解释,我感觉好像是在那个距离之内此方法有效,而当距离设置为“0”时则表示不考虑距离因素,不知道我的理解正确否? 3 楼 duanlonglong 2011-07-26   如何得到连接的卫星数呢???????????????

热点排行