关闭应用程序后,Android本地服务已停止

时间:2019-04-28 20:00:20

标签: android delphi android-service firemonkey delphi-10.3-rio

我正在使用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');

请在主机应用关闭后帮助我解决此问题以运行服务。

1 个答案:

答案 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;