码迷,mamicode.com
首页 > 移动开发 > 详细

Delphi获取Android下GPS的NMEA 0183数据

时间:2015-05-06 13:07:49      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

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

unit utAndroidNmea;

interface

uses 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;



implementation

uses 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;

 

Delphi获取Android下GPS的NMEA 0183数据

标签:

原文地址:http://www.cnblogs.com/hezihang/p/4481451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!