我使用Delphi 10 Seattle update1,并且我有一个android服务,该服务从主机应用程序启动,但我不知道如何从主机应用程序停止该服务。有人可以告诉我吗?

最佳答案

您正在使用
TLocalServiceConnection.StartService()方法。 Embarcadero没有提供相应的TLocalServiceConnection.StopService()方法,因此您将不得不直接调用Android的Context.stopService()方法。

这是TLocalServiceConnection.startService()$(BDS)\source\rtl\android\System.Android.Service.pas的源代码:

class procedure TLocalServiceConnection.StartService(const AServiceName: string);
var
  LIntent: JIntent;
  LService: string;
begin
  LIntent := TJIntent.Create;
  LService := AServiceName;
  if not LService.StartsWith('com.embarcadero.services.') then
    LService := 'com.embarcadero.services.' + LService;
  LIntent.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString(LService));
  TAndroidHelper.Activity.startService(LIntent);
end;


您可以将TAndroidHelper.Activity.startService()替换为TAndroidHelper.Activity.stopService()

var
  LIntent: JIntent;
begin
  LIntent := TJIntent.Create;
  LIntent.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString('com.embarcadero.services.LocationService'));
  TAndroidHelper.Activity.stopService(LIntent);
end;

10-08 02:57