zoukankan      html  css  js  c++  java
  • Android入门之GPS定位详解

    一、LocationManager

    LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。

    [java] view plaincopy
     
    1. LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);  


    二、LocationListener

    LocationListener,位置监听,监听位置变化,监听设备开关与状态。

    [java] view plaincopy
     
    1. //定义  
    2. LocationListener locationListener=new LocationListener(){  
    3.     //位置信息变化时触发  
    4.     public void onLocationChanged(Location location) {  
    5.         system.out.println("时间:"+location.getTime());  
    6.         system.out.println("经度:"+location.getLongitude());  
    7.         system.out.println("纬度:"+location.getLatitude());  
    8.         system.out.println("海拔:"+location.getAltitude());  
    9.     }  
    10.     //gps禁用时触发  
    11.     public void onProviderDisabled(String provider) {  
    12.         system.out.println("当前GPS状态:禁用 ");  
    13.     }  
    14.     //gps开启时触发  
    15.     public void onProviderEnabled(String provider) {  
    16.         system.out.println("当前GPS状态:开启 ");  
    17.     }  
    18.     //gps状态变化时触发  
    19.     public void onStatusChanged(String provider, int status,Bundle extras) {  
    20.         if(status==LocationProvider.AVAILABLE){  
    21.             system.out.println("当前GPS状态:可见的 ");  
    22.         }else if(status==LocationProvider.OUT_OF_SERVICE){  
    23.             system.out.println("当前GPS状态:服务区外 ");  
    24.         }else if(status==LocationProvider.TEMPORARILY_UNAVAILABLE){  
    25.             system.out.println("当前GPS状态:暂停服务 ");  
    26.         }  
    27.     }  
    28. };  
    29. //绑定监听,有4个参数  
    30. //参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种,我们选用GPS,网络在此不做讨论  
    31. //参数2,位置信息更新周期:  
    32. //参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息  
    33. //参数4,监听  
    34. //备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新  
    35. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);   


    三、Location

    Location,位置信息,通过Location可以获取时间、经纬度、海拔等位置信息。上面采用locationListener里面的onLocationChanged()来获取location,下面讲述如何主动获取location。

    [java] view plaincopy
     
    1. Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
    2. system.out.println("时间:"+location.getTime());  
    3. system.out.println("经度:"+location.getLongitude());  

    注意:Location location=new Location(LocationManager.GPS_PROVIDER)方式获取的location的各个参数值都是为0。

    四、GpsStatus.Listener

    GpsStatus.Listener ,GPS状态监听,包括GPS启动、停止、第一次定位、卫星变化等事件。

    [java] view plaincopy
     
    1. //定义  
    2. GpsStatus.Listener gpsStatusListener=new GpsStatus.Listener(){  
    3.     public void onGpsStatusChanged(int event) {  
    4.         if(event==GpsStatus.GPS_EVENT_FIRST_FIX){  
    5.             //第一次定位  
    6.         }else if(event==GpsStatus.GPS_EVENT_SATELLITE_STATUS){  
    7.             //卫星状态改变  
    8.             GpsStatus gpsStauts= locationManager.getGpsStatus(null); // 取当前状态  
    9.             int maxSatellites = gpsStauts.getMaxSatellites(); //获取卫星颗数的默认最大值  
    10.             Iterator<GpsSatellite> it = gpsStatus.getSatellites().iterator();//创建一个迭代器保存所有卫星  
    11.             int count = 0;    
    12.             while (it.hasNext() && count <= maxSatellites) {    
    13.                 count++;   
    14.                 GpsStatellite s = it.next();  
    15.             }    
    16.             system.out.println("搜索到:"+count+"颗卫星");  
    17.         }else if(event==GpsStatus.GPS_EVENT_STARTED){  
    18.             //定位启动  
    19.         }else if(event==GpsStatus.GPS_EVENT_STOPPED){  
    20.             //定位结束  
    21.         }  
    22.     }  
    23. };  
    24. //绑定  
    25. locationManager.addGpsStatusListener(gpsStatusListener);  

    五、GpsStatus

    GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。

    [java] view plaincopy
     
    1. //实例化  
    2. GpsStatus gpsStatus = locationManager.getGpsStatus(null); // 取当前状态  
    3. //获取默认最大卫星数  
    4. int maxSatellites = gpsStatus.getMaxSatellites();    
    5. //获取第一次定位时间(启动到第一次定位)  
    6. int costTime=gpsStatus.getTimeToFirstFix();  
    7. //获取卫星  
    8. Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();  
    9. //一般再次转换成Iterator  
    10. Iterator<GpsSatellite> itrator=iterable.iterator();  


    六、GpsSatellite

    GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。

    [java] view plaincopy
     
      1. //获取卫星  
      2. Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();  
      3. //再次转换成Iterator  
      4. Iterator<GpsSatellite> itrator=iterable.iterator();  
      5. //通过遍历重新整理为ArrayList  
      6. ArrayList<GpsSatellite> satelliteList=new ArrayList<GpsSatellite>();   
      7. int count=0;  
      8. int maxSatellites=gpsStatus.getMaxSatellites();  
      9. while (itrator.hasNext() && count <= maxSatellites) {    
      10.     count++;    
      11.     satellite = itrator.next();   
      12.     statelliteList.add(satellite);  
      13. }   
      14. System.out.println("总共搜索到"+count+"颗卫星");  
      15. //输出卫星信息  
      16. for(int i=0;i<satelliteList.size();i++){  
      17.     //卫星的方位角,浮点型数据  
      18.     System.out.println(satelliteList.get(i).getAzimuth());  
      19.     //卫星的高度,浮点型数据  
      20.     System.out.println(satelliteList.get(i).getElevation());  
      21.     //卫星的伪随机噪声码,整形数据  
      22.     System.out.println(satelliteList.get(i).getPrn());  
      23.     //卫星的信噪比,浮点型数据  
      24.     System.out.println(satelliteList.get(i).getSnr());  
      25.     //卫星是否有年历表,布尔型数据  
      26.     System.out.println(satelliteList.get(i).hasAlmanac());  
      27.     //卫星是否有星历表,布尔型数据  
      28.     System.out.println(satelliteList.get(i).hasEphemeris());  
      29.     //卫星是否被用于近期的GPS修正计算  
      30.     System.out.println(satelliteList.get(i).hasAlmanac());  
      31. }  
  • 相关阅读:
    github提交代码403
    针对七牛含有特殊字符的文件名,对特殊字符编码处理
    去除字符串所有空格
    按关键词匹配度排序
    服务器监控-Zabbix
    数据同步
    字符串-占位符
    Redis序列化
    Redis监听回调
    时间计算
  • 原文地址:https://www.cnblogs.com/hudabing/p/4153839.html
Copyright © 2011-2022 走看看