Когда приложение закрыто, служба Android Local была остановлена - PullRequest
0 голосов
/ 28 апреля 2019

Я использую Delphi 10.3 для разработки приложений для Android и внедрил Service для получения данных с сервера.Поток работал правильно, но закрывается при закрытии приложения.Я использовал следующий код для запуска службы:

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 голосов
/ 02 мая 2019

Этот код у меня работает

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;
...