Я следую руководству по 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 Oreo Nad.
На данный момент уведомление запущено, и я вижу службу на переднем плане, выполнив команду:
$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()
.