В настоящее время я работаю над приложением для воспроизведения звука, и я использую запущенную службу для воспроизведения музыки в фоновом режиме. Я начинаю и привязываюсь к службе, используя следующий код.
val intent = Intent(context, MusicService::class.java)
context.startService(intent)
context.bindService(intent, serviceConnection, 0)
Он продвигается на передний план при игре и получает понижение в рейтинге, когда музыка приостанавливается.
// onAudioPlay
service.startForeground(NOTIFY_ID, notification)
// onAudioPause
service.stopForeground(false)
Сервис работает до сих пор. Но когда уведомление приостанавливается (удаляется) пользователем в состоянии паузы, служба сбрасывается через несколько секунд, давая эту ошибку.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myplayer, PID: 4380
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1775)
android.os.Handler.dispatchMessage(Handler.java:105)
android.os.Looper.loop(Looper.java:164)
android.app.ActivityThread.main(ActivityThread.java:6541)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Это происходит только в Oreo, и я уже читал об ограничениях фона в Oreo. Но следующие моменты меня обманывают.
- Эта служба является связанной службой (на которую не распространяются ограничения)
- Я никогда не использую Context.startForegroundService() для запуска службы (и не хочу ее использовать).
- Служба не сбрасывается, когда ее снижают с приоритета, это происходит при удалении уведомления.
Почему служба рушится? Что я делаю не так? Я очень благодарен, если кто-то скажет мне, что происходит здесь.