java 从自定义rom中的系统应用程序启动服务

xqkwcwgp  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(196)

我的用例很简单,我想创建一个启动服务的系统应用程序。(我对自定义ROM开发是新手)
为此,我添加了:我的AndroidManifest.xml中的android:sharedUserId="android.uid.system"。到目前为止,我仍然在我的模拟器中使用官方的Android版本(这可能就是为什么我会遇到这个问题)
我开始我的服务:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) context.startForegroundService(service);
else context.startService(service);

不幸的是,服务没有启动,我得到以下错误:

Calling a method in the system process without a qualified user: 
android.app.ContextImpl.startForegroundService:1466 
android.content.ContextWrapper.startForegroundService:649
b0zn9rqh

b0zn9rqh1#

不直接使用context.startForegroundService(service)方法,可以使用ContextCompat.startForegroundService(context, service)方法。此方法自动添加必要的用户上下文。通过使用ContextCompat.startForegroundService(),系统应用程序应该能够在自定义ROM中成功启动前台服务。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    ContextCompat.startForegroundService(context, service);
} else {
    context.startService(service);
}

AndroidManifest.xml中,确保系统应用程序具有必要的权限

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

希望这能帮上忙。

相关问题