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

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

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

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

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

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

private final LocationListener locationListener = new LocationListener() {public void onLocationChanged(Location location) { // 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发// log it when the location changesif (location != null) {Log.i("SuperMap","Location changed : Lat: " + location.getLatitude() + " Lng: " + location.getLongitude());// Location location =// locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);double latitude = location.getLatitude(); // 经度double longitude = location.getLongitude(); // 纬度double altitude = location.getAltitude(); // 海拔mapController.animateTo(new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6)));}}
 以上的这些步骤一般应当在Activity的onCreate()阶段完成。

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

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

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

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


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

KML文件可以通过Google Earth“添加地标”的方式获得,但是要转成ADT中识别的格式,还要利用http://ge2adt.appspot.com/转换一下。

更多相关文章

  1. Android设置屏幕亮度及Alpha值
  2. android调用第三方地图(URI)
  3. Android美工坊--listview更改选中时item背景色
  4. android 线程优先级设置
  5. [Android(安卓)UI界面] 怎样实现ListView分页效果?
  6. android 定制对话框 Layoutlnflater
  7. android设置gps自动开启
  8. Android(安卓)FlexboxLayoutManager 使用
  9. Android横屏,全屏设置

随机推荐

  1. 删除android系统自带锁屏,导航栏、状态栏
  2. Android如何获取SIM卡信息
  3. android布局
  4. android字体
  5. Android(安卓)的状态栏通知(Notification
  6. Android原生消息处理与FMX平台服务消息处
  7. android用户界面之TabHost教程实例汇总
  8. Android学习笔记_76_Android(安卓)Progre
  9. Android中SDK安装出错Failed to fectch U
  10. [ZZ]Android(安卓)Debug Bridge