As Android documentation says:
A MediaSessionService will automatically create a MediaStyle notification for you in the form of a MediaNotification.
So I implemented a minimal MediaSessionService which supports "playing" a song and Получение его метаданных. Я могу управлять им, используя MediaController из моей деятельности, но нет уведомления, чтобы управлять им за пределами приложения. Чего мне не хватает? < /P>
Служба: < /p>
@OptIn(UnstableApi::class)
class PlaybackService : MediaSessionService() {
private val _job = SupervisorJob()
private var _mediaSession: MediaSession? = null
override fun onCreate() {
super.onCreate()
val scope = CoroutineScope(Dispatchers.IO + _job)
_mediaSession = MediaSession.Builder(this, Player(mainLooper, scope)).build()
}
override fun onDestroy() {
_mediaSession?.player?.release();
_mediaSession?.release();
_job.cancel()
super.onDestroy()
}
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? {
return _mediaSession
}
private class Player(looper: Looper, val scope: CoroutineScope) : SimpleBasePlayer(looper) {
private val _logger = Logger.getLogger("PlaybackService")
private val _availableCommands: Commands = Commands.Builder().addAll(
COMMAND_PLAY_PAUSE,
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM,
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM,
COMMAND_GET_CURRENT_MEDIA_ITEM,
COMMAND_GET_METADATA
).build();
private val _metadata = MediaMetadata.Builder()
.setArtist("Artist")
.setTitle("Title")
.build()
private val _audioAttributes = AudioAttributes.Builder()
.setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
.setUsage(C.USAGE_MEDIA)
.build()
override fun getState(): State {
return State.Builder()
.setAvailableCommands(_availableCommands)
.setPlaylist(listOf(MediaItemData.Builder("")
.setMediaMetadata(_metadata)
.build()))
.setAudioAttributes(_audioAttributes)
.build()
}
override fun handleSetPlayWhenReady(playWhenReady: Boolean) = scope.future {
onPlayPause(playWhenReady)
}
private suspend fun onPlayPause(play: Boolean) {
delay(500)
if (play)
_logger.info("Play command invoked.")
else
_logger.info("Pause command invoked.")
}
}
}
MediaController Использование:
override fun onStart() {
super.onStart()
val context = requireContext()
val sessionToken = SessionToken(context, ComponentName(context, PlaybackService::class.java))
val future = MediaController.Builder(context, sessionToken).buildAsync();
future.addListener({
val mediaController = future.get()
mediaController.play()
val metadata = mediaController.mediaMetadata
}, MoreExecutors.directExecutor())
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... tification
Android Media3 MediaSessionService не производит уведомление ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1742008210
Anonymous
As Android documentation says:
A MediaSessionService will automatically create a MediaStyle notification for you in the form of a MediaNotification.
So I implemented a minimal MediaSessionService which supports "playing" a song and Получение его метаданных. Я могу управлять им, используя MediaController из моей деятельности, но нет уведомления, чтобы управлять им за пределами приложения. Чего мне не хватает? < /P>
Служба: < /p>
@OptIn(UnstableApi::class)
class PlaybackService : MediaSessionService() {
private val _job = SupervisorJob()
private var _mediaSession: MediaSession? = null
override fun onCreate() {
super.onCreate()
val scope = CoroutineScope(Dispatchers.IO + _job)
_mediaSession = MediaSession.Builder(this, Player(mainLooper, scope)).build()
}
override fun onDestroy() {
_mediaSession?.player?.release();
_mediaSession?.release();
_job.cancel()
super.onDestroy()
}
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? {
return _mediaSession
}
private class Player(looper: Looper, val scope: CoroutineScope) : SimpleBasePlayer(looper) {
private val _logger = Logger.getLogger("PlaybackService")
private val _availableCommands: Commands = Commands.Builder().addAll(
COMMAND_PLAY_PAUSE,
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM,
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM,
COMMAND_GET_CURRENT_MEDIA_ITEM,
COMMAND_GET_METADATA
).build();
private val _metadata = MediaMetadata.Builder()
.setArtist("Artist")
.setTitle("Title")
.build()
private val _audioAttributes = AudioAttributes.Builder()
.setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)
.setUsage(C.USAGE_MEDIA)
.build()
override fun getState(): State {
return State.Builder()
.setAvailableCommands(_availableCommands)
.setPlaylist(listOf(MediaItemData.Builder("")
.setMediaMetadata(_metadata)
.build()))
.setAudioAttributes(_audioAttributes)
.build()
}
override fun handleSetPlayWhenReady(playWhenReady: Boolean) = scope.future {
onPlayPause(playWhenReady)
}
private suspend fun onPlayPause(play: Boolean) {
delay(500)
if (play)
_logger.info("Play command invoked.")
else
_logger.info("Pause command invoked.")
}
}
}
MediaController Использование:
override fun onStart() {
super.onStart()
val context = requireContext()
val sessionToken = SessionToken(context, ComponentName(context, PlaybackService::class.java))
val future = MediaController.Builder(context, sessionToken).buildAsync();
future.addListener({
val mediaController = future.get()
mediaController.play()
val metadata = mediaController.mediaMetadata
}, MoreExecutors.directExecutor())
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79510578/android-media3-mediasessionservice-does-not-produce-a-notification[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия