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

  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。

  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,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。

    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. }

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

  1. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

  2. Android之GPS定位详解

    一.LocationManager LocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager.我们可以通过如下代码创建LocationManger ...

  3. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

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

    今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为P ...

  5. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  6. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  7. Android图片缓存之Bitmap详解

    前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...

  8. Android Design Support Library使用详解

    Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...

  9. Android 之窗口小部件详解--App Widget

    Android 之窗口小部件详解--App Widget  版本号 说明 作者 日期  1.0  添加App Widge介绍和示例  Sky Wang 2013/06/27        1 App ...

随机推荐

  1. TreeMap按照key排序

    package test.tool.gui.common; import java.util.Comparator; import java.util.TreeMap; public class Te ...

  2. map遍历方法

    java中遍历MAP的几种方法 Java代码 Map<String,String> map=new HashMap<String,String>();    map.put(& ...

  3. 安装scikit-learn过程记录

    环境:Windows 10 X64企业版. 安装python2.7: 官网下载python-2.7.12.amd64.msi安装文件,过程不赘述.安装完成后在PATH环境变量中加入%PYTHON_HO ...

  4. Jquery学习之基础篇二

    1.Jquery添加元素的方法 append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被 ...

  5. Tengine 常用模块使用介绍

    Tengine 和 Nginx Tengine简介 从2011年12月开始:Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能 和特性. ...

  6. 一张图总结docker命令

  7. AppDelegate方法中文记录

    /// 在程序启动之后,重写自定义设置的位置 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption ...

  8. 关于win10输入法问题(打不出中文)解决方法

    提问过windous10打不出字,通过安装第三方输入法和所有有关切换的快捷键都没用,现在找到了解决方法 win键+x,打开命令提示符,输入ctfmon,回车 这样就能看到桌面右下角的输入法上面的叉叉消 ...

  9. yii2 登录、退出、自动登录

    自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动登录,那么就会把用户的认证信息保存到cookie中,cookie的有效期为1年或者几个月. 在下 ...

  10. Python开发【第十五篇】:Web框架之Tornado

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...