gps在DELPHI全职安装android服务的位置

追风赶月莫停留,平芜尽处是春山。这篇文章主要讲述gps在DELPHI全职安装android服务的位置相关的知识,希望能为你提供帮助。
尝试这个代码,但我的应用程序关闭,我想经常得到GPS位置,但它现在不起作用我用udp客户端可视化。

type TandroidServiceDM = class(TAndroidService) function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private { Private declarations } FLocationManager: JLocationManager; FLocationManagerService: JObject; FLocationListener: JLocationListener; protectedpublic { Public declarations } end; var AndroidServiceDM: TAndroidServiceDM; implementation{ %CLASSGROUP 'FMX.Controls.TControl' }uses AndroidApi.JNI.App; {$R *.dfm}procedure send_udp(ip: string; puerto: Integer; datos: string); var send_udp: TIdUDPClient; begin send_udp := TIdUDPClient.Create(nil); send_udp.Host := ip; send_udp.Port := puerto; send_udp.Send(datos); send_udp.Free; end; function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var iter:JIterator; location : JLocation; beginResult := TJService.javaClass.START_STICKY; FLocationManagerService := TAndroidHelper.Context.getSystemService( TJContext.JavaClass.LOCATION_SERVICE); FLocationManager := TJLocationManager.Wrap( (FLocationManagerService as ILocalObject).GetObjectID); if FLocationManager.isProviderEnabled( TJLocationManager.JavaClass.GPS_PROVIDER) then begin FLocationListener := TJLocationListener.Create; FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, 0, 0, FLocationListener, TJLooper.JavaClass.getMainLooper); end; location := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.GPS_PROVIDER); send_udp('127.0.0.1',5555,'Servicio Iniciado'+location.getLatitude.ToString); end; end.

如果有人可以帮助我使用此代码或其他一些发送gps位置
我需要每10分钟发一次。
答案【gps在DELPHI全职安装android服务的位置】代码中缺少的1部分是你的FLocationListener。你需要实现它!完成后,当手机移动时,onLocationChanged功能将被调用(编辑回)。另一部分是指定最小报告频率和最小时间和最小距离(我的代码中为10秒和30米)。即使在服务中也不需要定时器或循环。
以下是我的Delphi Android Service项目中的一些代码(只是一些重要部分)我希望您能将它们正确地放在项目中,因为我不想将整个项目粘贴到这里!
TLocationListener = class;

...
locationListener: TLocationListener;

...
TLocationListener = class(TJavaLocal, JLocationListener) private [weak] FParent : TMainService; public constructor Create(AParent : TMainService); procedure onLocationChanged(location: JLocation); cdecl; procedure onProviderDisabled(provider: JString); cdecl; procedure onProviderEnabled(provider: JString); cdecl; procedure onStatusChanged(provider: JString; status: Integer; extras: JBundle); cdecl; end;

...
procedure TMainService.StartAndroidGPS; var LocationManagerService: JObject; location: JLocation; beginif not Assigned(FLocationManager) then begin LocationManagerService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE); FLocationManager := TJLocationManager.Wrap( (LocationManagerService as ILocalObject).GetObjectID ); if not Assigned(locationListener) then locationListener := TLocationListener.Create(self); end; FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, Round(10 * 1000), 30, locationListener, TJLooper.JavaClass.getMainLooper); // just to get started, ask the GPS for the Last Known Position (if any) location := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.GPS_PROVIDER); LocationisChanged(location); end;

...
procedure TMainService.StopAndroidGPS; begin if Assigned(locationListener) then FLocationManager.removeUpdates(locationListener); end;

...
{ TLocationListener }constructor TLocationListener.Create(AParent: TMainService); begin inherited Create; FParent := AParent; end; procedure TLocationListener.onLocationChanged(location: JLocation); begin FParent.LocationisChanged(location); end;

...
procedure TMainService.LocationisChanged(location: JLocation); var lc: TLocationCoord2D; begin // do whatever you need to do with the location here, for example: lc := TLocationCoord2D.Create(location.getLatitude, location.getLongitude)) end;


    推荐阅读