Media 3 MediaController gibt NULL zurückAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Media 3 MediaController gibt NULL zurück

Post by Anonymous »

Hallo, dies ist mein erstes Projekt mit Android und mit Media 3 API. Ich verwende Mediensitzung mit dem Vordergrunddienst. Ich stelle den MediaController im ViewModel ein. />

Code: Select all

@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>
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()
}
< /code>
Ich hoffe, jemand hilft mir dabei. Ich weiß nicht, selbst wenn ViewModels die richtige Möglichkeit ist, den Media Controller zu erstellen. Ich bin neu in Android.  Danke < /p>
Ich dachte/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 funktioniert nicht, obwohl es funktioniert, wenn ich ihm eine HTTP -URL bei der Verwendung eines Online -Verwendung>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post