我正在使用Delphi 10.3来开发android应用程序,并且已经实现了Service以从Server检索数据。线程运行正常,但是在关闭应用程序时关闭。 我已使用以下代码运行该服务:
DMService.StartCommand();
begin
AddLog; //Log
SampleThread := TThread.Create;
Result := TJService.JavaClass.START_REDELIVER_INTENT;
end;
相同的代码在Delphi 10.1中运行良好(没有提到Android 26作为目标版本)。
我也尝试使用TTask,但问题仍然无法解决。
我也尝试过Result := TJService.JavaClass.START_STICKY;
,但服务仍然关闭。
经过几次分析,我在关闭主机应用程序后分析了该服务,该服务再次启动,并且启动了线程/任务,并且该服务被破坏了。
我应该启用任何特殊权限,还是在创建时需要添加更多代码。当前,我正在使用以下代码从主机应用程序启动服务:
FLocalServiceConnection := TLocalServiceConnection.Create;
FLocalServiceConnection.StartService('SCommuteSupervisorNotificationService');
请在主机应用关闭后帮助我解决此问题以运行服务。
答案 0 :(得分:0)
此代码对我有用
procedure TDM.StartForeground;
var
LBuilder: JNotificationCompat_Builder;
begin
try
//if FIsForeground or not TAndroidHelperEx.CheckBuildAndTarget(26) then
//Exit; // <======
LBuilder := TJNotificationCompat_Builder.JavaClass.init(TAndroidHelper.Context);
LBuilder.setAutoCancel(True);
LBuilder.setContentTitle(StrToJCharSequence('Sample'));
LBuilder.setContentText(StrToJCharSequence('Monitoring location changes'));
LBuilder.setSmallIcon(TAndroidHelper.Context.getApplicationInfo.icon);
LBuilder.setTicker(StrToJCharSequence('Sample 2'));
TJService.Wrap(System.JavaContext).startForeground(3987, LBuilder.build);
except
end;
end;
function TDM.AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
StartForeground;
Result := TJService.JavaClass.START_STICKY;
end;