如何使用android / ios下的delphi应用全时跟踪用户位置 [英] How to track the user location at full time with a delphi app under android/ios
问题描述
我需要一直跟踪用户位置,即使用户没有使用我的应用程序也是如此。但是,我对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屋!