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

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

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



得到了LocationManager的实例locatonManager以后,我们通过下面的语句来注册一个周期性的位置更新。

Java代码
  1. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
  2. 1000,0,locationListener);



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

Java代码
  1. privatefinalLocationListenerlocationListener=newLocationListener(){
  2. publicvoidonLocationChanged(Locationlocation){//当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
  3. //logitwhenthelocationchanges
  4. if(location!=null){
  5. Log.i("SuperMap","Locationchanged:Lat:"
  6. +location.getLatitude()+"Lng:"
  7. +location.getLongitude());
  8. }
  9. }
  10. publicvoidonProviderDisabled(Stringprovider){
  11. //Provider被disable时触发此函数,比如GPS被关闭
  12. }
  13. publicvoidonProviderEnabled(Stringprovider){
  14. //Provider被enable时触发此函数,比如GPS被打开
  15. }
  16. publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){
  17. //Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
  18. }
  19. };



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

在成功注册了一个周期性坐标更新以后,我们就随时可以通过下面的方法来取得当前的坐标了。

Java代码
  1. Locationlocation=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  2. doublelatitude=location.getLatitude();//经度
  3. doublelongitude=location.getLongitude();//纬度
  4. doublealtitude=location.getAltitude();//海拔



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

Java代码
  1. <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>



如果是在模拟器中调试的话,我们有两种方法来设置一个模拟的坐标值,第一种是通过DDMS,我们可以在eclipse的ADT插件中使用这种方法,只要打开"Window" --&gt; "Show View" 中打开"Emulator Control" View即可看到如下的设置窗口,我们可以手动,或者通过KML和GPX文件来设置一个坐标。

另一种方法是使用geo命令,我们需要telnet到本机的5554端口,然后在命令行下输入类似于 geo fix -121.45356 46.51119 4392 这样的命令,后面三个参数分别代表了经度、纬度和(可选的)海拔。


William Hua 原创, 欢迎光临William Hua的blog

更多相关文章

  1. Android电源管理
  2. Android电源管理
  3. Android6.0 ueventd
  4. android handlerthread 通知机制
  5. Android属性动画ValueAnimator源码简单分析
  6. Android中LocationManager的简单使用,获取当前位置
  7. android的binder机制研究
  8. Android深入浅出之 Surface
  9. 箭头函数的基础使用

随机推荐

  1. Android(安卓)Unable to resolve target
  2. 大数据相关面试题
  3. Android(安卓)SharedPreferences mode 的
  4. Android杂谈--关于解析包时错误解决方案
  5. Android:窗口的Flag设置作用
  6. Android(安卓)两种启动Service(远程)的方式
  7. android中setOnClickListener的那点事
  8. Android实现应用的增量更新\升级
  9. android-------- 常用且应该学习的框架
  10. “亲子安全卫士”项目总结