追风赶月莫停留,平芜尽处是春山。这篇文章主要讲述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;
推荐阅读
- 如何在android中改变可绘制形状的颜色
- 新款Macbook Air笔记本安装Windows 8时出现黑屏无法正常安装怎样办
- win8.1系统自带的ie11浏览器突然停止工作怎样办【图】
- win8系统更改微软账户失败出现出错0xd00000bb的处理办法【图】
- 安装win8系统没声音提示中没有接入音频设备的处理办法【图文】
- Windows8系统下如何判断电脑是否支持蓝牙4.0或更高版本
- win8旗舰版32位系统安装软件程序时出现乱码的处理办法【图】
- 浅谈win8系统电脑开机时总是需要进行扫描与修好磁盘的故障
- win8系统桌面创建关闭进程程序快捷键迅速结束进程的技巧【图】