http://www.iteye.com/topic/363950

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

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

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



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

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



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

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



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

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

Java代码
  1. Locationlocation=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  2. double latitude=location.getLatitude(); //经度
  3. double longitude=location.getLongitude(); //纬度
  4. double altitude=location.getAltitude(); //海拔
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);double latitude = location.getLatitude();     //经度double longitude = location.getLongitude(); //纬度double altitude =  location.getAltitude();     //海拔



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

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



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

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

-----------------------------------------

A:只有第一次send的时候才触发,以后就不会触发了,我也不知道为什么?
B:听说把把模拟器的时间改成正确的时间就可以了,试试
A:试了下,好像可以了,把模拟器的时间改成正确的时间

更多相关文章

  1. android动画坐标定义
  2. Android 判断应用程序安装位置
  3. Android四大布局之表格布局行列位置控制
  4. 自定义View学习笔记(二)-Android坐标系简介
  5. 在Android上调用OpenCV 2.4.10库函数
  6. android:layout_alignParent 布局相对于父布局的位置
  7. 第五课--位置布局
  8. Android文件存储位置简述
  9. Android Button控件 的简单使用(button监听和onClick触发函数使用

随机推荐

  1. JS解析XML文件和XML字符串详解
  2. XML文件结构和基本语法
  3. 了解Xml格式
  4. XML轻松学习手册
  5. 深入SQLite多线程的使用总结详解
  6. XML入门的常见问题(四)
  7. java中枚举的详细使用介绍
  8. XML入门的常见问题(三)
  9. J2ME Mobile 3D入门教程系列文章之一
  10. XML入门的常见问题(二)