Media 3 MediaController gibt in einigen Fällen null zurückAndroid

Forum für diejenigen, die für Android programmieren
Guest
 Media 3 MediaController gibt in einigen Fällen null zurück

Post by Guest »

Hallo also, dies ist mein erstes Projekt mit Android und mit Media 3 API. Ich verwende Mediensitzung mit dem Vordergrunddienst. Ich richte den MediaController im ViewModel ein. Ich versuche zurückzugeben, was ich habe, was ich habe vom Spieler zwischengespeichert, aber es gibt ein Problem, warum ist MediaController in Fällen null und in einigen Fällen nicht. />

Code: Select all

@HiltViewModel
class PlayerViewModel @Inject constructor(
...
) : 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>
Hier ist mein MediaController-Setup < /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>
Hier ist 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>
Hier ist mein GetMediaItem, der Metadaten im Grunde genommen festgelegt und MediaItem zurückgibt, damit ich es für Mediencontroller verwenden kann.    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()
}
Ich hoffe, jemand hilft mir dabei. Ich weiß nicht, ob ViewModels die richtige Möglichkeit ist, den Media Controller zu erstellen. Ich bin neu in Android. Danke
Ich dachte, das Problem liegt im Player.

Code: Select all

/storage/emulated/0/Android/data/com.mostaqem/files/Download/179.mp3
Ich habe versucht, Datei hinzugefügt: // Es kann also ein URI sein, aber es hat nicht funktioniert, obwohl es funktioniert, wenn ich ihm eine HTTP -URL gebe Arbeiten Sie im Init -Status,
Ich erwartete, dass der MediaController das MediaItem festgelegt und vorbereitet hat, aber es ist kein festgelegter MediaItem, da MediaController null

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post