如何解决Delphi无法启动高于Android 8版本的Android Service
我用Delphi 10.3完成的应用正在启动并监视Android版本7上的android服务。 但是在Android版本8之上,我得到了错误:
java.lang.IllegalStateException: 不允许启动Intent ... 应用程序在后台uid中为空
发现从版本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;
服务StartCommand代码
function TDM.AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags,StartId: Integer): Integer;
begin
Result := TJService.JavaClass.START_STICKY;
end;
解决方法
Delphi提供了在一行中启动服务的功能
用途 System.Android.Service;
...
TLocalServiceConnection.StartService('service_name');
service_name-仅服务名称,不带包(com.embarcadero。)!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。