Как устранить ошибку: Не разрешено запускать службу. Намерение: приложение находится в фоновом режиме с uid? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть служба, которая запускается при загрузке завершенного события, но приложение вылетает с сообщением об ошибке, как показано выше. Пожалуйста, помогите, как я могу запустить свою службу на событии приемника BroadCast Boot_Completed.

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)
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

После некоторых поисков я получил ответ, что мне нужно проверить версию SDK, которую я затем могу запустить как службу переднего плана или просто с помощью starteService;

class StartRelayServiceAtBootReceiver : BroadcastReceiver() {

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

        if (Intent.ACTION_BOOT_COMPLETED == intent.action) {
            val intent = Intent(context, MyService::class.java)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                context.startForegroundService(intent)
            } else {
                context.startService(intent)
            }
            Log.i("Autostart", "started")
        }
    }
}
0 голосов
/ 28 мая 2020

Существуют ограничения для приложений в фоновом режиме. Очевидно, что если устройство только что загрузилось, все приложения находятся «в фоновом режиме». Вы не можете запустить Service из фонового приложения. Вероятно, вам нужно использовать JobScheduler для того, что вы хотите.

См. Этот документ для обсуждения ограничений для фоновых приложений и того, как перейти на другие разрешенные решения:

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

...