获取原始NMEA 0183语句的方法

article/2024/9/17 2:56:27

        MEA0183语句是从卫星上广播的含有丰富信息的原始GPS语句,它的语法为海用电子设备的标准格式。它所含的信息量远远不止位置坐标,开发和利用这些信息可能会带来意想不到的商机。比如,它发出的时间信息已经被很多钟表厂商利用,开发出了卫星授时钟表,让使用者再不用对表,随时都能得到标准时间。这篇小文不打算介绍如何开发它的利用,而是说说如何用手机读取它,实现从无到有的过程。

        

        android手机读取NMEA0183原始语句过程不是很复杂,总共需要4步,只要每步按要求走对了,就肯定能获得NMEA0183语句了。下面分别概述。

第一步是权限的获得,就是这两个权限:

        这两个权限在应用清单中声明,在写代码的时候,AS有时会要求你做权限检查,似乎有点多此一举。

第二步是监听,使用LocationListener()方法,当你声明它的时候,就会有4个回调方法:

onLocationChanged(Location location)方法是在位置改变时回调位置的信息;

onProviderDisabled(String provider)当用户关闭了信息的提供者时会调用;onProviderEnabled(String provider)当用户打开了信息提供者的时候调用;onStatusChanged(String provider,int status,Bundle extras)这个方法在信息提供者的状态在可用,暂时不可用和无服务三个状态直接切换时被调用。服务停止的状态码为OUT_OF_SERVICE,如何服务停止,在短期内可恢复,状态码为TEMPORARILY_UNAVAILABLE,如果服务正常有效,状态码为AVAILABLE。实际上,我只看到过第1个方法回调的信息,其他的没见过。

        第三步是信息更新。一般情况下,位置的信息是个动态的信息,所以实时更新是位置信息的一个特点,在android中,位置信息的更新使用的是requestLocationUpdates(String provider,long mintime,float minDistance,LocatoinListener listener)方法,根据传入参数的不同它有5个变体,上面列出的常用的一种。第1个参数是位置信息的提供者,在获取NMEA0183时,我设置的是GPS_PROVIDER,第2个参数是最小时间间隔,这个要看APP的使用目的和使用者运动的速度了,NMEA0183原始语句的数据量大,时间间隔如果太短了设备有可能响应不及时。

第四步就是读取了。NMEA0183语句的读取方法虽然都是用addNmeaListener方法,但是根据设备的固件版本不同采用不同的读取模式,手机android版本API等级23-29的要用OnNmeaMessageListener()监听模式读取NMEA0183语句,这个是代码:

手机android的API等级在15-28的可以用Nmealistener监听模式,也可以用GpsStatus.NmeaListener接口模式。用Nmealistener的代码如下图:

用GpsStatus.NmeaListener接口模式的代码如下图:

这几种方法我都试验过,感觉第1种方法比较可靠,它的连续性好,可以持续很长时间不间断地获取NMEA0183语句,低版本的方法虽然也能持续工作很长时间,但有时会有间断。如果版本23以上,推荐使高版本的方法。另外,如果要想连续不断的获得NMEA0183语句,定期激活更新方法能取得较好的效果。在这里我要感谢doris_d大神,他的经验和提示解决了我在读取方法与固件版本方面的困惑!


http://chatgpt.dhexx.cn/article/8liq2mmp.shtml

相关文章

从NMEA0183到GNSS定位数据获取(二)软件篇

总述 GPS我们都知道,一种用来全球定位的系统,后来俄罗斯推出了格洛纳斯定位系统,中国推出了北斗定位,欧盟有伽利略,印度与日本也有有发展。所以后来把覆盖全球的自主地利空间定位的卫星系统成为GNSS。 现在卫星定位那么…

c++中拷贝构造函数被调用的时机

1 c中拷贝构造函数被调用的时机 拷贝构造函数被调用的几种情况: (1)当用类的一个对象去初始化该类的另一个对象时,系统会自动调用拷贝构造函数; (2)将一个对象作为实参传递给一个非引用类型的…

二说 拷贝构造函数 拷贝赋值函数

文章目录 什么是拷贝构造函数拷贝构造函数的调用时机2.1 当函数的参数为类的对象时2.2 函数的返回值是类的对象2.3 对象需要通过另外一个对象进行初始化 浅拷贝与深拷贝3.1 默认拷贝构造函数3.2 浅拷贝3.3 深拷贝3.4 防止默认拷贝发生 拷贝构造函数的几个细节4.1 为什么拷贝构造…

C++拷贝构造函数、构造函数和析构函数

一、拷贝构造函数 转载自:http://www.cnblogs.com/BlueTzar/articles/1223313.html 1、类对象的拷贝 对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a88; int ba; 而类对象与普通对象不同,类对象内部…

拷贝构造函数起作用的三种情况

拷贝构造函数起作用的三种情况: 1.当用类的对象去初始化同类的另一个对象时。 Date d2(d1); Date d2 d1; //初始化语句,并非赋值语句。 2.当函数的形参是类的对象,调用函数进行形参和实参结合时。 void Func(A a1) //形参是类Date的对象…

【拷贝构造函数】c++类拷贝构造函数详解

【拷贝构造函数】c类拷贝构造函数详解 目录 【拷贝构造函数】c类拷贝构造函数详解一、什么是拷贝构造函数二、拷贝构造函数的几种调用时机1. 当函数的参数为类的对象时2. 函数的返回值是类的对象3. 当成员变量为类类型时4. 普通派生类构造函数的写法 三、浅拷贝与深拷贝1. 默认…

拷贝(复制)构造函数定义及3种调用情况举例

一、拷贝构造函数是一种特殊的构造函数,其形参为本类的对 象引用。 class 类名 { public : 类名(形参);//构造函数 类名(类名 &对象名);//拷贝构造函数 ... }; //拷贝构造函…

C++——拷贝构造函数详解

C——拷贝构造函数详解 1.拷贝构造函数的特点:2.通过例子引入拷贝构造:3构造对象的时候使用引用返回与不使用引用返回的问题:3.1不使用引用返回:3.2引用返回——从已经死亡的地址接收值不牢靠: 4.缺省的拷贝构造和等号…

C++ 拷贝构造函数详解

C 拷贝构造函数详解 下面的讲解将以C标准库的string类作为讲解对象,string类:class with pointer member(s) 1、拷贝构造函数和拷贝赋值函数 1.1引入 下面是给出的测试函数,也是我们要能在自己设计的myString类中实现的功能: …

详解析构函数、拷贝构造函数

目录 一.析构函数(析构器) (一).使用方式及注意事项 1.使用方式 2.注意事项 (二).默认析构函数 二.拷贝构造函数 (一).使用方式及注意事项 1.使用方式 2.注意事项 &#xff0…

【深入理解C++】拷贝构造函数

文章目录 1.拷贝构造函数2.默认的拷贝操作3.默认拷贝构造函数4.何时调用拷贝构造函数 1.拷贝构造函数 拷贝构造函数是构造函数的一种。当利用已存在的对象创建一个新对象时,就会调用新对象的拷贝构造函数进行初始化。 拷贝构造函数的格式是固定的,即接…

C++拷贝构造函数详解

一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a 100; int b a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简…

c++拷贝构造函数(深拷贝,浅拷贝)详解

一、什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简单例子。 #include<iostream> using n…

YOLO 裂缝检测

环境 python3.5 yolov3 opencv keras

基于OpenCV的混凝土裂纹检测

基于OpenCV的混凝土裂纹检测 前言 这是我发的第一次博客&#xff0c;有什么建议大家可以给我留言&#xff0c;感激不尽! 接下来&#xff0c;我们进入正题。 一、使用函数库 numpy, opencv, heapq, skimage.morphology 二、使用步骤 1.初步预处理 初步预处理包括&#xf…

【图像识别】基于计算机视觉实现路面裂缝检测识别系统matlab代码

1 简介 随着公路与铁路事业的飞速发展,各类车辆和里程的增加,铁路的一次次提速,都对路面产生了巨大的压力。不论是公路路面还是铁路路面,路面裂纹都能随处可见,由路面裂纹造成的交通事故时有发生。研究路面裂纹检测方法对于路面维护、交通安全具有极其重大意义。近年来,路面裂…

基于计算机视觉的裂纹检测方案

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达01. 数据集 我们首先需要从互联网上获取包含墙壁裂缝的图像&#xff08;URL格式&#xff09;数据。总共包含1428张图像&#xff1a;其中一半是新的且未损坏的墙壁&#x…

halcon裂纹缺陷检测

针对这一类表面的检测就不能单纯依靠帧差或者背景差来完成&#xff0c;因为背景的纹理不可能和当前图像的纹理完全相同。 方法一—局部阈值分割 一、局部阈值分割 1、gen_sin_bandpass–局部阈值分割 dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset,…

使用 Python 进行深度学习以进行裂纹检测

使用 Python 进行深度学习以进行裂纹检测 问题陈述数据集准备训练模型结论参考 问题陈述 虽然新技术已经改变了我们生活的方方面面&#xff0c;在建筑领域似乎牛逼正在努力追赶。目前&#xff0c;建筑物的结构状况仍然主要是人工检查。简单来说&#xff0c;即使现在需要检查结…

Halcon-表面检测-----裂纹检测

对应示例程序&#xff1a; detect_mura_defects_blur.hdev 目标&#xff1a;实例实现LCD上有很多污点干扰下&#xff0c;检测LCD的印痕检测。 思路为&#xff1a;对LCD图像进行拆分&#xff0c;提取RGB三个分量。 对B分量进行处理&#xff0c;将其转换为频域内图像&#xff0…