#android #mediabrowserservicecompat
#Android #mediabrowserservicecompat
Вопрос:
Я следую руководству Android по использованию MediaBrowserServiceCompat в приложении media Player, но служба отключена при выходе из приложения.
<service android:name=".media.PlaybackService">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
При запуске приложения служба создана правильно. mediaController.transportControls.play()
Вызывается нажатие кнопки On, и после этого onPlay()
вызывается метод из моего класса обратного вызова сеанса. Запускается внутренняя onPlay()
служба: context.startService(Intent(context, MediaBrowserServiceCompat::class.java))
(также пробовалась startForegroundService
для Oreo и выше) и устанавливается на передний план: this@PlaybackService.startForeground(SERVICE_ID, notificationBuilder?.build())
. Создан канал уведомлений для API Oreo nad higher.
На данный момент запущено уведомление, и я вижу, что служба находится на переднем плане, выполнив команду:
$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()
.
Комментарии:
1. Вы выяснили, в чем была проблема? Я сталкиваюсь с точно такой же проблемой, и было бы здорово узнать, что вы сделали. Документация Google просто ужасна в отношении MediaBrowserService и всех его тонкостей
2. К сожалению, у меня не было времени доработать этот хобби-проект, поэтому я смирился с ухудшением пользовательского интерфейса.
3. @RikvanVelzen Ты разобрался с этим? Я застрял с той же проблемой и не смог найти какую-либо соответствующую документацию
Ответ №1:
Конечно, может быть, что ваше MediaBrowser
соединение было единственным, что поддерживало MediaBrowserService
работу, и закрытие этого соединения приводит к MediaBrowserService
уничтожению.
В моем случае я решил создать службу до создания MediaBrowser
:
// Create the media browser service
Intent intent = new Intent(application, MusicService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
}
else {
context.startService(mixerIntent);
}
// Create connection with the service
mediaBrowser = MediaBrowserCompat(
context,
ComponentName(requireContext(), MusicService::class.java),
connectionCallbacks,
null
)
Не забывайте: после создания службы служба должна вызвать свой startForeground
метод в течение пяти секунд.