Media 3 MediaController возвращает NULL в некоторых случаяхAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Media 3 MediaController возвращает NULL в некоторых случаях

Сообщение Anonymous »

Привет, так что это мой первый проект с Android и с Media 3 API, я использую сеанс медиа с службой переднего плана, я настраиваю медиаконтроллер в ViewModel, я пытаюсь вернуть то, что я Кэшируется от игрока, но есть одна проблема, что почему MediaController в случаях нулевой, а в некоторых случаях это не так, вот мой полный код
Вот мой ViewModel

Код: Выделить всё

@HiltViewModel
class PlayerViewModel @Inject constructor(
private val mediaControllerFuture: Listener
...
) : ViewModel() {
private var mediaController: MediaController? = null
val playerState = mutableStateOf(PlayerSurah(reciter = defaultReciter))

init {
viewModelScope.launch(errorHandler) {
if (playerState.value.isLocal) {
restoreCachedState()
if (isCached) {
applyCachedState()
}
} else {
networkObserver.observe().collect {
if (it == NetworkStatus.Available) {
restoreCachedState()
if (isCached) {
applyCachedState()
}
}
}

}

}
setupMediaController()

}
< /code>
Вот моя настройка MediaController < /p>
private fun setupMediaController() {

mediaControllerFuture.addListener(
{
mediaController = mediaControllerFuture.get().apply {
addListener(object : Player.Listener {
override fun onIsPlayingChanged(isPlaying: Boolean) {
...
}

override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
...
super.onMediaItemTransition(mediaItem, reason)
}

}, MoreExecutors.directExecutor()
)
}
< /code>
Вот где MediaController-null < /p>
    private fun applyCachedState() {
val player = playerState.value

if (player.surah != null) {
if (!player.isLocal) { //Online Mode
// WORKS HERE
viewModelScope.launch {
val metadataData = getMediaURL(
surahID = player.surah.id,
reciterID = player.reciter.id,
recitationID = player.recitationID
)

val metadata = getMediaItem(metadataData)
mediaController?.setMediaItem(metadata, player.position) // IT's NOT NULL HERE
mediaController?.prepare() // It's NOT NULL HERE
}
}
if (player.isLocal) { // Offline Mode
// DOESN"T WORK HERE
val data = AudioData(
url = player.url!!, //file:///storage/emulated/0/Android/data/com.mostaqem/files/Download/179.mp3
surah = player.surah,
recitationID = player.recitationID!!,
recitation = RecitationData(
reciter = player.reciter,
id = player.recitationID,
englishName = player.reciter.englishName,
reciterID = player.reciter.id,
name = ""
),
)
val mediaItem = getMediaItem(data)
mediaController?.setMediaItem(mediaItem) // IT'S NULL HERE So it doesnt work
mediaController?.prepare()  // IT'S NULL HERE so it doesnt work

}
}
}
< /code>
Вот мой getmediaitem, который в основном устанавливает метаданные и возвращает MediaItem, чтобы я мог использовать его для контроллера медиа < /p>
    private fun getMediaItem(data: AudioData): MediaItem {

val surahName = data.surah.arabicName
val reciterName = data.recitation.reciter.arabicName
val metadata:  MediaMetadata =
MediaMetadata.Builder().setTitle(surahName).setGenre(data.recitation.id.toString())
.setAlbumTitle(data.recitation.reciter.id.toString())
.setAlbumArtist(data.recitation.reciter.image).setArtist(reciterName)
.setArtworkUri(data.surah.image.toUri()).build()
return MediaItem.Builder().setUri(data.url.toUri()).setMediaMetadata(metadata)
.setMediaId(data.surah.id.toString()).build()
}
Надеюсь, кто -нибудь поможет мне в этом, я не знаю, даже если ViewModels - это правильный способ создания контроллера медиа, я новичок в Android, спасибо
Я думал, что проблема в Player.url < /code> В первом она возвращалась

Код: Выделить всё

/storage/emulated/0/Android/data/com.mostaqem/files/Download/179.mp3
я попробовал добавить файл: // , так что это может быть URI, но не работал, хотя он работает, когда я даю ему http URL при использовании онлайн, но это не так Работа в состоянии init,
Я ожидал, что MediaController установит и подготовит медиаитем, но нет, он не установил и не подготовил медиайтемом, так как MediaController - это null

Подробнее здесь: https://stackoverflow.com/questions/794 ... some-cases
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Media 3 MediaController возвращает NULL в некоторых случаях
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Media 3 MediaController возвращает NULL
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Media 3 MediaController возвращает NULL
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Resources.Load в некоторых случаях завершается сбоем, но в других случаях работает корректно.
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Resources.Load в некоторых случаях завершается сбоем, но в других случаях работает корректно.
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»