如何解决错误:不允许启动服务意图:应用程序在后台uid中?

问题描述 投票:-1回答:1

我有一项服务,它是在启动完成时启动的,但是应用程序崩溃并显示如上的错误消息。请帮助我如何在Boot_Completed的BroadCast接收器事件上启动我的服务。

MyService.kt

class MyService : Service() {

    override fun onCreate() {
        Log.d(TAG, "onCreate")
    }
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        return START_STICKY
    }

    override fun onBind(intent: Intent?): IBinder? {
        return null
    }

    override fun onDestroy() {
        Log.d(TAG, "DO SOME STAFF")
    }
}

MyBroadCaster.kt

class StartRelayServiceAtBootReceiver : BroadcastReceiver() {
     override fun onReceive(context: Context, intent: Intent) {

        if (Intent.ACTION_BOOT_COMPLETED == intent.action) {
            val serviceIntent = Intent(context, MyService::class.java)
            context.startService(serviceIntent)
        }
    }
}
android kotlin broadcastreceiver android-service
1个回答
0
投票

[后台应用程序有一些限制。显然,如果设备刚刚启动,则所有应用程序都在“后台”。您无法从后台应用程序启动Service。您可能需要使用JobScheduler来设置所需的内容。

请参阅本文档,以了解有关后台应用程序的限制以及如何迁移到允许的其他解决方案的讨论:

https://developer.android.com/about/versions/oreo/background

© www.soinside.com 2019 - 2024. All rights reserved.