我正在按照Android 指南在媒体播放器应用程序中使用 MediaBrowserServiceCompat,但该服务在应用程序退出时被销毁。
<service android:name=".media.PlaybackService">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
在应用程序启动服务正确创建。在按下按钮时mediaController.transportControls.play()
调用,并在onPlay()
调用我的会话回调类中的此方法之后。内部onPlay()
服务已启动:(context.startService(Intent(context, MediaBrowserServiceCompat::class.java))
也尝试startForegroundService
过 Oreo 及更高版本)并设置为前台:this@PlaybackService.startForeground(SERVICE_ID, notificationBuilder?.build())
。创建奥利奥和更高 API 的通知通道。
现在通知已启动,我可以通过发出命令看到服务在前台:
$adb shell dumpsys activity services PlaybackService (...) isForeground=true foregroundId=1 foregroundNoti=Notification(channel=MyChannelId pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 color=0xff000000 category=transport actions=1 vis=PUBLIC) (...)
到目前为止一切正常,但是当我按下主页按钮时,我希望服务保持启动,而是调用onDestroy()
我的MediaBrowserServiceCompat
类的方法。返回应用程序并再次启动服务后,它没有设置为前台(也没有通知)。
我startService
在我的应用程序中使用了唯一的一个呼叫,并删除了每个呼叫stopSelf
和stopForeground
测试。
在 API 28、26、22 和 18 上,我得到了相同的结果。
我也试过START_STICKY
从onStartCommand()
.