如何使用android / ios下的delphi应用全时跟踪用户位置 [英] How to track the user location at full time with a delphi app under android/ios

查看:74
本文介绍了如何使用android / ios下的delphi应用全时跟踪用户位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一直跟踪用户位置,即使用户没有使用我的应用程序也是如此。但是,我对android / ios体系结构的了解很少,不知道该怎么做。

I need to track all the time the user location, even when the user is not using my app. However my knowledge of android/ios architecture is little low to know how to do this.

我是否需要一直使我的完整应用程序在内存中存活(我认为这会浪费一些资源)还是我需要创建一个小的应用程序?

Do I need to make my full app alive in memory at all time (and I think this will be a little waste of resources) or do I need to create a small app like service (don't even know if it's possible) to do this job?

推荐答案

尝试在START_STICKY上使用android服务属性。
在后台线程中,您可以侦听位置更改(不要使用标准的LocationSensor-仅实现基于Java接口的解决方案)。

Try to use android service with START_STICKY attribute. In background thread you can listen for location changes (do not use standard LocationSensor - just implement java interface based solution).

您还可以找到背景示例

对于android,您可能会对 Androidapi.JNI.Location

For android you might be interested in unit Androidapi.JNI.Location

TLocationListener = class(TJavaLocal, JLocationListener)
  public
    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

对于服务模块,您必须声明一些变量

And for your service module you have to declare some variables

TServiceModule = class(TAndroidService)
  function AndroidServiceStartCommand(const Sender: TObject;
    const Intent: JIntent; Flags, StartId: Integer): Integer;
private
  FLocationManager: JLocationManager;
  FLocationManagerService: JObject;
  FLocationListener: JLocationListener;

function TServiceModule.AndroidServiceStartCommand(const Sender: TObject;
  const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
  Result := 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 := TLocationListener.Create;
      FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER,
        0, 0, FLocationListener, TJLooper.JavaClass.getMainLooper);

这篇关于如何使用android / ios下的delphi应用全时跟踪用户位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆