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状态:禁用\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, 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. }
时间: 2024-11-07 16:37:22

Android入门之GPS定位详解的相关文章

Android之GPS定位详解

一.LocationManagerLocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager.我们可以通过如下代码创建LocationManger对象.LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 二.LocationListenerLocationListener,位置监听,监听位置变化,监听设备

小甲鱼PE详解之基址重定位详解(PE详解10)

今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为PE结构非常重要,再说做这个课件的确是很费神的事哈.在这里再次强调一下,只要是windows操作程序,其就要遵循PE格式,再说人家看雪的网址就是www.pediy.com. 简单的讲是可以,但是怕就怕有些朋友知识点遗漏了或者错误理解意思.不能深刻体会等,这样的效果是不好的~所以,小甲鱼尽管这系列视频可

Android Service demo例子使用详解

Android Service demo例子使用详解\ 概述Service 是 Android 的四大组件之一,它主要的作用是后台执行操作,Activity 属于带有 UI 界面跟用户进行交互,而 Service 则没有 UI 界面,所有的操作都是基于后台运行完成.并且 Service 跟 Activity 一样也是可以由其它的应用程序调用启动的,而且就算用户切换了应用程序,Service 依旧保持运行.一个组件如果与 Service 进行了绑定( bind ),就可以跟 Service 进行数

Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送,写这个系列真的很要命,你要去把他们的API文档大致的翻阅一遍,而且各种功能都实现一遍,解决各种bug各种坑,不得不说,极光推送真坑,大家使用还是要慎重,我们看一下极光推送的官网 https://www.jpush.cn/common/ 推送比较使用,很多软件有需要,所以在这个点拿出来多讲讲,我们本节

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

Android APK优化工具Zipalign详解

最近在googl play上发布apk要优化 Android SDK中包含一个"zipalign"的工具,它能够对打包的应用程序进行优化.在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率.因此,这种方式能够让应用程序和整个系统运行得更快.我们强烈推荐在新的和已经发布的程序上使用zipalign工具来得到优化后的版本 一.这里下载android SDK,只为了用他的zipalign工具,当然什么时候大家有兴趣了用来开发两个小程序也是很简单的 A

Android触摸屏事件派发机制详解与源码分析

请看下面三篇博客,思路还是蛮清晰的,不过还是没写自定义控件系列哥们的思路清晰: Android触摸屏事件派发机制详解与源码分析一(View篇) http://blog.csdn.net/yanbober/article/details/45887547 Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇) http://blog.csdn.net/yanbober/article/details/45912661 Android触摸屏事件派发机制详解与源码分析三(Activi

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

Android开发之通知栏Notification详解

Notification的用法  --- 状态栏通知 发送一个状态栏通知必须的两个类: 1. NotificationManager   --- 状态栏通知的管理类,负责发通知,清除通知等 NotificationManager : 是一个系统Service,必须通过 context.getSystemService(NOTIFICATION_SERVICE)方法获取 NotificationManager notificationManager = (NotificationManager)