我目前正在音频播放应用程序,我正在使用一个启动绑定服务来播放音乐在后台。我使用以下代码启动并绑定到服务。
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)
为什么服务崩溃了?我做错了什么?如果有人告诉我这里发生了什么,我非常感谢。
要展开Udeshuk的答案--任何MediaButtonReceiver
的使用(构建挂起的意图或仅接收媒体按钮意图)都可能导致使用startForregroundService
调用服务,因为MediaButtonReceiver.onReceive
在Oreo上以这种方式启动服务。我在任何地方都没见过这个记录。