Delphi获取Android下GPS的NMEA 0183数据
16lz
2021-12-04
下面的程序,可以实现Android下获取GNSS的NMEA0183数据:
unit utAndroidNmea;interfaceuses Androidapi.JNIBridge, Androidapi.JNI.App, Androidapi.NativeActivity, Androidapi.JNI.JavaTypes, Androidapi.JNI.Location;type TonNmeaReceived=procedure(timestamp: Int64; nmea: String) of Object; TJGpsStatus_NmeaListener = class(TJavaGenericImport<JGpsStatus_NmeaListenerClass, JGpsStatus_NmeaListener>) end; TNmeaProvider=class(TJavaLocal,JGpsStatus_NmeaListenerClass, JGpsStatus_NmeaListener) protected FLocationManager:JLocationManager; FOnNmeaReceived:TonNmeaReceived; public procedure onNmeaReceived(timestamp: Int64; nmea: JString); cdecl; public constructor Create; destructor Destroy;override; function Run:Boolean; property OnNmeaLineReceived:TOnNmeaReceived read FOnNmeaReceived write FOnNmeaReceived; end;implementationuses Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android,FMX.Platform.Android, System.SysUtils, System.Android.Sensors;{ TNmea }constructor TNmeaProvider.Create;begin inherited Create;end;destructor TNmeaProvider.Destroy;begin if Assigned(FLocationManager) then FLocationManager.removeNmeaListener(Self ); inherited;end;procedure TNmeaProvider.onNmeaReceived(timestamp: Int64; nmea: JString); cdecl;begin if Assigned(FOnNmeaReceived) then FOnNmeaReceived(timestamp, JStringToString(nmea));end;function TNmeaProvider.Run:Boolean;begin CallInUiThread(procedure var LocationService: JObject; begin LocationService := SharedActivityContext.getSystemService(TJContext.JavaClass.LOCATION_SERVICE); FLocationManager := TJLocationManager.Wrap((LocationService as ILocalObject).GetObjectID); FLocationManager.addNmeaListener(Self); end);end;end.
用法:
在Form中添加一个TLocationSensor, 设置Active:=True;
然后定义OnNmeaReceive方法:
procedure TForm1.OnNmeaReceived(timestamp: int64; nmeasentence: String);begin FStream.Write(PChar(nmeasentence)^, Length(nmeasentence)*sizeof(Char));end;
更多相关文章
- android.inputmethodservice.KeyboardView 自定义键盘 字体大小
- Android(安卓)ApiDemos示例解析(167):Views->Layouts->TableLayo
- android中的自定义控件
- android布局layout中的一些属性
- android布局layout中的一些属性
- android粗略获得程序运行时间的方法
- android定义可以被其他程序调用的activity
- 自定义控件其实很简单2/3
- Android(安卓)studio 串口通信(动态获取串口)