下面的程序,可以实现Android下获取GNSS的NMEA0183数据:

  1. unit utAndroidNmea;
  2.  
  3. interface
  4.  
  5. uses Androidapi.JNIBridge, Androidapi.JNI.App, Androidapi.NativeActivity, Androidapi.JNI.JavaTypes, Androidapi.JNI.Location;
  6.  
  7. type
  8. TonNmeaReceived=procedure(timestamp: Int64; nmea: String) of Object;
  9.  
  10. TJGpsStatus_NmeaListener = class(TJavaGenericImport<JGpsStatus_NmeaListenerClass, JGpsStatus_NmeaListener>) end;
  11.  
  12. TNmeaProvider=class(TJavaLocal,JGpsStatus_NmeaListenerClass, JGpsStatus_NmeaListener)
  13. protected
  14. FLocationManager:JLocationManager;
  15. FOnNmeaReceived:TonNmeaReceived;
  16. public
  17. procedure onNmeaReceived(timestamp: Int64; nmea: JString); cdecl;
  18. public
  19. constructor Create;
  20. destructor Destroy;override;
  21. function Run:Boolean;
  22. property OnNmeaLineReceived:TOnNmeaReceived read FOnNmeaReceived write FOnNmeaReceived;
  23. end;
  24.  
  25. implementation
  26.  
  27. uses Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android,
  28. FMX.Platform.Android, System.SysUtils, System.Android.Sensors;
  29.  
  30. { TNmea }
  31.  
  32. constructor TNmeaProvider.Create;
  33. begin
  34. inherited Create;
  35. end;
  36.  
  37. destructor TNmeaProvider.Destroy;
  38. begin
  39. if Assigned(FLocationManager) then FLocationManager.removeNmeaListener(Self );
  40. inherited;
  41. end;
  42.  
  43. procedure TNmeaProvider.onNmeaReceived(timestamp: Int64; nmea: JString); cdecl;
  44. begin
  45. if Assigned(FOnNmeaReceived) then FOnNmeaReceived(timestamp, JStringToString(nmea));
  46. end;
  47.  
  48. function TNmeaProvider.Run:Boolean;
  49. begin
  50. CallInUiThread(procedure
  51. var
  52. LocationService: JObject;
  53. begin
  54. LocationService := SharedActivityContext.getSystemService(TJContext.JavaClass.LOCATION_SERVICE);
  55. FLocationManager := TJLocationManager.Wrap((LocationService as ILocalObject).GetObjectID);
  56. FLocationManager.addNmeaListener(Self);
  57. end);
  58.  
  59. end;
  60.  
  61. end.

用法:

在Form中添加一个TLocationSensor, 设置Active:=True;

然后定义OnNmeaReceive方法:

  1. procedure TForm1.OnNmeaReceived(timestamp: int64; nmeasentence: String);
  2. begin
  3. FStream.Write(PChar(nmeasentence)^, Length(nmeasentence)*sizeof(Char));
  4.  
  5. end;

Delphi获取Android下GPS的NMEA 0183数据的更多相关文章

  1. Delphi获取目录下所有文件名

    //获取一个文件夹下的所有文件 //不包括文件夹里面的文件 //ListBox1.Items:= searchfile('Z:\'); //注意,path后面要有'\'; function  Sear ...

  2. Delphi在Android下实现BroadcastReceiver功能(举例在Delphi下获取USB外设拔插消息)

    在Android里,用java通过实现BroadcastReceiver接口,就可以获得Intent消息.可是Delphi程序不能直接实现JBroadcastReceiver,如何能够实现类似Java ...

  3. Delphi在Android下使用Java库

    本文将以Android的USB串口通讯库为例,介绍Delphi如何在Android中使用Java的库. USB串口通讯库地址: https://github.com/felHR85/UsbSerial ...

  4. Delphi在Android下通过WiFI进行调试

    如果我们需要调试USB程序且Android设备只有一个USB口,那么可以通过WiFi来调试程序,这样USB口就可以用了. 大致步骤如下: 1.在有root权限的Android设备里安装“Wifi AD ...

  5. Android下用Sqlite数据库存储数据

    第一步:  写个类 ,继承 SQLiteOpenHelper public class MyDatabaseOpenHelper extends SQLiteOpenHelper { } 第二步:   ...

  6. Android下基于PCM的音频渲染

    环境准备 请按照我之前的文章-Android下基于SDL的位图渲染,安装必要的开发环境. 实践篇 这里主要参考Beginning SDL 2.0(6) 音频渲染及wav播放,只不过将源从WAV文件改成 ...

  7. Delphi XE7 GPS控件android下的新变化

    Delphi XE7 GPS控件的Android新变化 GPS控件的Accuracy可以起作用了,Accuracy>0时:      1--100:ACCURACY_HIGH  101--500 ...

  8. Android Service获取当前位置(GPS+基站)

    需求详情:1).Service中每隔1秒执行一次定位操作(GPS+基站)2).定位的结果实时显示在界面上(要求得到经度.纬度)技术支持:1).获取经纬度通过GPS+基站获取经纬度,先通过GPS来获取, ...

  9. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

随机推荐

  1. Apache的主要目录和配置文件详解

    一.Apache 主要配置文件注释Apache的主配置文件:/etc/httpd/conf/httpd.conf默认站点主目录:/var/www/html/Apache服务器的配置信息全部存储在主配置 ...

  2. vue从安装到初始化项目

  3. 企业级Apache详解2

    http_conf主配置说明 root@lamp01 apache]# grep -Ev "#|^$" conf/httpd.conf DocumentRoot "/us ...

  4. Maven编译Java程序配置

    Hive 需要在工程里添加的Jar包: hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar $HIVE_HOME/lib/hive-exe ...

  5. mac使用指南--软件安装部分

    最近因为开发需要,换了个mac,发现和Windows下面的操作和习惯真是千差万别啊,在这里记录一下,有需要的也可以参考一下. 安装前强烈建议根据个人习惯设置好触控板!!!什么单击双击选中拖拽的统统设好 ...

  6. Django F对象的使用

    概念 class FF()是代表模型字段的值,也就是说对于一些特殊的字段的操作,我们不需要用Python把数据先取到内存中,然后操作,在存储到db中了. 场景 例1:我们有个统计点击量的字段,每次更新 ...

  7. 2018-2019-2 网络对抗技术 20165322 Exp5 MSF基础应用

    2018-2019-2 网络对抗技术 20165322 Exp5 MSF基础应用 目录 实验内容与步骤 一个主动攻击实践 MS08-067(失败) ms17_010_psexec(成功且唯一) 一个针 ...

  8. Django创建基本流程

    Django创建基本流程 1.创建工程:django-admin startproject 工程名 2.创建应用:python manage.py startapp 应用名 3.激活项目:修改sett ...

  9. [19/04/14-星期日] 网络编程_java.net包(InetAddress类、InetSocketAddress类、URL类)

    一.概念 Java为了可移植性,不允许直接调用操作系统,而是由java.net包来提供网络功能.Java虚拟机负责提供与操作系统的实际连接. InetAddress    作用:封装计算机的IP地址和 ...

  10. indexzero/http-server-2-使用

    所以在ethereumjs-vm/examples/run-transactions-simple例子中要怎么使用http-server 1.首先在ethereumjs-vm/examples/run ...