android - Android 8以上版本Delphi无法启动Android Service

标签 android delphi service foreground-service delphi-10.3-rio

我使用 Delphi 10.3 完成的应用程序正在 Android 版本 7 上成功启动并监控我的 Android 服务。 但在 Android 版本 8 以上我收到错误:

java.lang.IllegalStateException: 不允许启动Intent... 应用程序在后台 uid null

发现从版本 8 Android 开始更改了政策。我应该使用 startForegroundService 但我不清楚如何从服务响应以通知 Android 并允许启动。 (并且找不到Delphi示例)

这里是启动服务代码

    procedure TfrmStarter.StartBLEService;
    var
        Intent : JIntent;
        NativeComponent : JComponentName;
        PackageName, AppName : JString;

begin
    PackageName := StringToJString('com.embarcadero.LysaAdmin');
    AppName := StringToJString('com.embarcadero.services.BLEService');

    Intent := TJIntent.Create;
    Intent.setAction(TJIntent.JavaClass.ACTION_MAIN);
    Intent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
    NativeComponent := TJComponentName.JavaClass.init(PackageName, AppName);
    Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    Intent.setComponent(NativeComponent);
    SharedActivity.startService(Intent);   //<< This work's fine Android 7

   // SharedActivity.startForegroundService(Intent); //<< Android 8.1 not getting errors but service is not started
end;

服务启动命令代码

function TDM.AndroidServiceStartCommand(const Sender: TObject;
  const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
 Result := TJService.JavaClass.START_STICKY; 
end;

最佳答案

Delphi 提供了一行启动服务的能力

用途 系统.Android.Service;

...

TLocalServiceConnection.StartService('service_name');

service_name - 只是服务名称,没有包(com.embarcadero。)!

关于android - Android 8以上版本Delphi无法启动Android Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64124054/

相关文章:

android - 景观维度被忽略

android - Nexus 5 (4.4.2) 手电筒 LED 未打开

android - 如何将选项卡之间的数据作为 Activity 发送?

Android - 我的 ListPreference 中的自定义行布局

mysql - Lazarus 插入 sql 结果 int 字符串网格

android - android 中具有有限服务的 fragment

web-services - 服务可以在其代码中调用另一个服务吗?

c# - 服务器响应 .net 上的重复条目

ios - Delphi XE4 iOS 加载位图 - 未加载文件

delphi - Windows Explorer 类似于 Delphi 中的控件