Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置;注册/注销来自某个 LocationProvider的周期性的位置更新;以及注册/注销接近某个坐标时对一个已定义Intent的触发等。今天我们就来看看Android 中LocatinManager的简单使用,以获取当前所在的位置为例。 

首先,我们需要获取LocationManager的一个实例,这里需要注意的是他的实例只能通过下面这种方式来获取,直接实例化LocationManager是不被允许的。 

Java代码  
  1. LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  


得到了LocationManager的实例locatonManager以后,我们通过下面的语句来注册一个周期性的位置更新。 
Java代码  
  1. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,  
  2.  10000, locationListener);  


这句代码告诉系统,我们需要从GPS获取位置信息,并且是每隔1000ms更新一次,并且不考虑位置的变化。最后一个参数是LocationListener的一个引用,我们必须要实现这个类。 

Java代码  
  1. private final LocationListener locationListener = new LocationListener() {  
  2.     public void onLocationChanged(Location location) { //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发  
  3.         // log it when the location changes  
  4.         if (location != null) {  
  5.             Log.i("SuperMap""Location changed : Lat: "  
  6.               + location.getLatitude() + " Lng: "  
  7.               + location.getLongitude());  
  8.         }  
  9.     }  
  10.   
  11.     public void onProviderDisabled(String provider) {  
  12.     // Provider被disable时触发此函数,比如GPS被关闭  
  13.     }  
  14.   
  15.     public void onProviderEnabled(String provider) {  
  16.     //  Provider被enable时触发此函数,比如GPS被打开  
  17.     }  
  18.   
  19.     public void onStatusChanged(String provider, int status, Bundle extras) {  
  20.     // Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数  
  21.     }  
  22. };  


以上的这些步骤一般应当在Activity的onCreate()阶段完成。 

在成功注册了一个周期性坐标更新以后,我们就随时可以通过下面的方法来取得当前的坐标了。 
Java代码  
  1. Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
  2. double latitude = location.getLatitude();     //经度  
  3. double longitude = location.getLongitude(); //纬度  
  4. double altitude =  location.getAltitude();     //海拔  


不过这时候,如果你尝试去运行这个LocationSample的话程序启动时多半就会报错,因为我们没有设置GPS相关的权限,解决方法也相当简单,在AndroidManifest.xml中的block里添加下面这句即可解决权限的问题。详细的权限设置,请参考官方文档docs/reference/android/Manifest.permission.html 
Java代码  
  1. "android.permission.ACCESS_FINE_LOCATION" />  


如果是在模拟器中调试的话,我们有两种方法来设置一个模拟的坐标值,第一种是通过DDMS,我们可以在eclipse的ADT插件中使用这种方法,只要打开"Window" --> "Show View" 中打开"Emulator Control" View即可看到如下的设置窗口,我们可以手动,或者通过KML和GPX文件来设置一个坐标。 
 
另一种方法是使用geo命令,我们需要telnet到本机的5554端口,然后在命令行下输入类似于 geo fix -121.45356 46.51119 4392 这样的命令,后面三个参数分别代表了经度、纬度和(可选的)海拔。 

更多相关文章

  1. Android三种定位方式
  2. Android文件存储位置简述
  3. Android(安卓)onTouchEvent, onClick及onLongClick的调用机制
  4. Android(安卓)L之 VectorDrawable
  5. Android之布局
  6. Android中LocationManager的简单使用,获取当前位置
  7. Android(安卓)系统启动分析
  8. android动画坐标定义
  9. 简述Android触摸屏手势识别

随机推荐

  1. 关于Android的Holo主题
  2. 初学Android,增加手势到手势库(五十)
  3. android软键盘的显示后隐藏
  4. Android中解析XML
  5. Android中JNI的使用方法
  6. android开发笔记之 Activity四种加载模式
  7. Android(安卓)游戏开发基础
  8. Android(安卓)NDK学习 Android.mk的制作
  9. Android(安卓)通用获取Ip的方法(判断手机
  10. Android桌面小部件AppWidget(1)