Как должна выглядеть правильная реализация службы переднего плана в API 28? - PullRequest
0 голосов
/ 16 января 2019

Я работаю над приложением, которое требуется для работы с Bluetooth Classic, поэтому мне нужно внедрить **** foreground service ****, чтобы система прослушивания не убивала систему для оптимизации использования батареи.

Я изо всех сил пытаюсь заставить работать службу переднего плана на API 28. Мой код работает на Android 9.0 Pie, но когда я запускаю его на Android 8.0, я получаю RemoteException rethrowFromSystemServer - "Невозможно запустить исключение с аргументами ..." из метода onStartCommand.

Чтобы повторить эту ошибку, просто клонируйте этот репозиторий и попробуйте установить compileSdk и targetSdk в 28.

https://github.com/paulpv/ForegroundServiceAPI26/tree/repro/app/src/main/java/com/github/paulpv/foregroundserviceapi26

Я повторяю - Все работает на Android 9.0 Pie, просто не работает, например. на Android 8.0, поэтому это не вызвано тем, что вы не добавили службу в манифест или не добавили уведомление или канал уведомлений.

Еще одно мое замечание - когда я понижаю compileSdk и targetSdk до 27, все работает нормально, проблема только с последним API 28.

Есть идеи, как правильно создать сервис переднего плана на API 28?

//Starting service

if (Build.VERSION.SDK_INT >= 26) {
   context.startForegroundService(intent)
} else {
   context.startService(intent)
}

//Calling startForeground in onCreate of service

override fun onCreate() {
        val pIntent = PendingIntent.getActivity(this, 0,
                Intent(this, MainService::class.java), 0)
        val notification = NotificationCompat.Builder(this)
                .setContentTitle("My App")
                .setContentText("Doing some work...")
                .setContentIntent(pIntent).build()
        startForeground(1000, notification)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...