Android入门之GPS定位详解

企鹅博客
18944
文章
0
评论
2020年1月14日17:23:52 评论 0 views

一、LocationManager

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

  1. LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);  

二、LocationListener

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

  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状态:禁用\n");  
  13.     }  
  14.     //gps开启时触发   
  15.     public void onProviderEnabled(String provider) {  
  16.         system.out.println("当前GPS状态:开启\n");  
  17.     }  
  18.     //gps状态变化时触发   
  19.     public void onStatusChanged(String provider, int status,Bundle extras) {  
  20.         if(status==LocationProvider.AVAILABLE){  
  21.             system.out.println("当前GPS状态:可见的\n");  
  22.         }else if(status==LocationProvider.OUT_OF_SERVICE){  
  23.             system.out.println("当前GPS状态:服务区外\n");  
  24.         }else if(status==LocationProvider.TEMPORARILY_UNAVAILABLE){  
  25.             system.out.println("当前GPS状态:暂停服务\n");  
  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, 10000, locationListener);   

三、Location

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

 

  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启动、停止、第一次定位、卫星变化等事件。

view plaincopy to clipboardprint?

  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.                 GpsSatellite s = it.next();    
  14.                 count++;    
  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。

  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();  
  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.     GpsSatellite satellite = itrator.next();    
  11.     satelliteList.add(satellite);    
  12.     count++;  
  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. }  
继续阅读
  • 版权声明: 发表于 2020年1月14日17:23:52
  • 转载注明:https://www.qieseo.com/171763.html
二叉树的Java实现及特点总结 Linux编程

二叉树的Java实现及特点总结

二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加。但是他也有自己的缺点:删除操作复杂。 我们先介绍一些关于二叉树的概念名词。 二叉树...
C++中的显式类型转换操作符 Linux编程

C++中的显式类型转换操作符

即使类型转换本身是危险的,在有些时候类型转换也是不可或缺的。程序员不使用显式转换,编译器也可能会使用隐式转换,那还不如把代码控制在程序员自己手中。 C++有4种显式类型转换操作符,最好不要使用C语言编...
Java编程:组合、继承和代理的区别 Linux编程

Java编程:组合、继承和代理的区别

组合、继承和代理三者的定义: 组合:在新类中new 另外一个类的对象,以添加该对象的特性。 继承:从基类继承得到子类,获得基类的特性。 代理:在代理类中创建某功能的类,调用类的一些方法以获得该类的部分...
Linux文件编程学习 Linux编程

Linux文件编程学习

在Linux平台下对文件编程可以使用两类函数:(1)Linux操作系统文件API;(2)C语言I/O库函数。 前者依赖于Linux系统调用,后者实际上与操作系统是独立的,因为在任何操作系统下,使用C语...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: