现在,您可以使用Delphi 10 Seattle的Android应用程序创建服务。
可以使用“ TLocalServiceConnection.StartService(服务名称);”启动服务。
很简单
但是,有时您想使用信息启动服务。
似乎没有这种方便的功能。
因此,创建自己的Intent并使用putExtra方法传递信息。
准备一个这样的函数:
function CreateIntent(const AServiceName: string; I: Integer; S: string): JIntent;
var
ServiceName: string;
begin
Result := TJIntent.Create;
ServiceName := AServiceName;
if not ServiceName.StartsWith('com.embarcadero.services.') then
ServiceName := 'com.embarcadero.services.' + ServiceName;
Result.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString(ServiceName));
Result.putExtra(TAndroidHelper.StringToJString('Int'), I);
Result.putExtra(TAndroidHelper.StringToJString('Str'), TAndroidHelper.StringToJString(S));
end;
像这样启动Sender。
procedure TForm1.Button1Click(Sender: TObject);
var
Intent: JIntent;
begin
Intent := CreateIntent(SERVICE_NAME, 987, '测试');
TAndroidHelper.Activity.startService(Intent);
end;
在服务端,它接收OnStartCommand事件中发送的参数。
function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags, StartId: Integer): Integer;
var
Int: Integer;
Str: string;
begin
Int := Intent.getIntExtra(TAndroidHelper.StringToJString('Int'), -1);
Str := TAndroidHelper.JStringToString
(Intent.getStringExtra(TAndroidHelper.StringToJString('Str')));
//处理
Result := TJService.JavaClass.START_STICKY;
end;