В моем проекте у меня есть класс аудио контроллера < /p>
class AudioController(val context: Context){
private val player = ExoPlayer.Builder(context).build()
private val _state = MutableStateFlow(PlayerState())
init{player.addListener(object : Player.Listener {...})}
private fun emitState() {//updates the _state based on player}
suspend fun setQueue(tracks: List, startIndex: Int) {
val intent = Intent(context, AudioPlayerService::class.java)
ContextCompat.startForegroundService(context, intent)
val items = tracks.map {
MediaItem.Builder()
.setMediaId("${it.id}")
.setUri(it.url)
.setMediaMetadata(...)
.build()
}
withContext(Dispatchers.Main) {
player.setMediaItems(items, startIndex, 0L)
player.prepare()
player.playWhenReady = false
emitState()
}
}
}
< /code>
и класс аудиоигры-< /p>
class AudioPlayerService : MediaLibraryService() {
var mediaLibrarySession: MediaLibrarySession? = null
var audioController = getKoin().get()
private val player: ExoPlayer by lazy { audioController.getPlayer() }
private lateinit var notificationProvider: DefaultMediaNotificationProvider
private val callback = object : MediaLibrarySession.Callback {...}
override fun onCreate() {
super.onCreate()
notificationProvider = DefaultMediaNotificationProvider.Builder(this)
.setNotificationId(NOTIFICATION_ID)
.setChannelId(NOTIFICATION_CHANNEL_ID)
.build()
setMediaNotificationProvider(notificationProvider)
mediaLibrarySession = MediaLibrarySession
.Builder(this, player, callback)
.setCustomLayout(listOf(getCorrectBookmarkButton()))
.build()
}
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaLibrarySession? = mediaLibrarySession
override fun onDestroy() {
mediaLibrarySession?.run {
player.release()
release()
mediaLibrarySession = null
}
super.onDestroy()
}
}
< /code>
и в классе приложения я делаю канал следующим образом < /p>
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannel(this)
//koin init happens here
}
}
private fun createNotificationChannel(context: Context) {
val channel = NotificationChannel(
"player_channel",
"Audio Playback",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Shows the currently playing audio"
}
val manager = getSystemService(context,NotificationManager::class.java)
manager?.createNotificationChannel(channel)
}
Проблема заключается в том, что каждый раз, когда моя модель представления использует метод AudioControllers Setqueue Аудиоплеер запускается правильно, но сбои через несколько секунд , и уведомление также не отображается
ошибка, которую я получаю, является
, и уведомление также не отображается
ошибка, которую я получаю
, и уведомление также не отображается
ошибка
и уведомление.android.app.ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{e4dbb13 u0 _._._/_._._.audio.AudioPlayerService}
Подробнее здесь: https://stackoverflow.com/questions/797 ... nd-service
Media3 не начинает сервис переднего плана ⇐ Android
Форум для тех, кто программирует под Android
1759343943
Anonymous
В моем проекте у меня есть класс аудио контроллера < /p>
class AudioController(val context: Context){
private val player = ExoPlayer.Builder(context).build()
private val _state = MutableStateFlow(PlayerState())
init{player.addListener(object : Player.Listener {...})}
private fun emitState() {//updates the _state based on player}
suspend fun setQueue(tracks: List, startIndex: Int) {
val intent = Intent(context, AudioPlayerService::class.java)
ContextCompat.startForegroundService(context, intent)
val items = tracks.map {
MediaItem.Builder()
.setMediaId("${it.id}")
.setUri(it.url)
.setMediaMetadata(...)
.build()
}
withContext(Dispatchers.Main) {
player.setMediaItems(items, startIndex, 0L)
player.prepare()
player.playWhenReady = false
emitState()
}
}
}
< /code>
и класс аудиоигры-< /p>
class AudioPlayerService : MediaLibraryService() {
var mediaLibrarySession: MediaLibrarySession? = null
var audioController = getKoin().get()
private val player: ExoPlayer by lazy { audioController.getPlayer() }
private lateinit var notificationProvider: DefaultMediaNotificationProvider
private val callback = object : MediaLibrarySession.Callback {...}
override fun onCreate() {
super.onCreate()
notificationProvider = DefaultMediaNotificationProvider.Builder(this)
.setNotificationId(NOTIFICATION_ID)
.setChannelId(NOTIFICATION_CHANNEL_ID)
.build()
setMediaNotificationProvider(notificationProvider)
mediaLibrarySession = MediaLibrarySession
.Builder(this, player, callback)
.setCustomLayout(listOf(getCorrectBookmarkButton()))
.build()
}
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaLibrarySession? = mediaLibrarySession
override fun onDestroy() {
mediaLibrarySession?.run {
player.release()
release()
mediaLibrarySession = null
}
super.onDestroy()
}
}
< /code>
и в классе приложения я делаю канал следующим образом < /p>
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannel(this)
//koin init happens here
}
}
private fun createNotificationChannel(context: Context) {
val channel = NotificationChannel(
"player_channel",
"Audio Playback",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Shows the currently playing audio"
}
val manager = getSystemService(context,NotificationManager::class.java)
manager?.createNotificationChannel(channel)
}
Проблема заключается в том, что каждый раз, когда моя модель представления использует метод AudioControllers Setqueue Аудиоплеер запускается правильно, но [b] сбои через несколько секунд [/b], и уведомление также не отображается
ошибка, которую я получаю, является
, и уведомление также не отображается
ошибка, которую я получаю
, и уведомление также не отображается
ошибка
и уведомление.android.app.ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{e4dbb13 u0 _._._/_._._.audio.AudioPlayerService}
Подробнее здесь: [url]https://stackoverflow.com/questions/79780114/media3-is-not-starting-foreground-service[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия