B
BraveSentry
Neues Mitglied
- 0
Hallo zusammen,
ich bastle an einer Gehörbildungs-App, die darauf beruht, dass ein Bordun-Ton die gesamte Zeit zu hören ist, in der die App im Vordergrund ist. Wenn die App verlassen wird, soll der Ton abbrechen und wenn die App wieder in den Vordergrund kommt, soll der Ton an der Stelle weiterspielen, an der er aufgehört hat.
Ich habe also eine .ogg mit genanntem Ton, der über 18 sekunden ein- und danch wieder ausfadet. Den lade ich so:
Damit das Ganze wie gewünscht aufhört und wieder anfängt, benutze ich diesen Code:
Das Problem ist nun, dass onStop() ja auch passiert, wenn ich innerhalb der App auf eine andere Activity wechsle. Der Sound bricht dann trotzdem ab. Wenn ich aber den Code bei onStop() auskommentiere, spielt der Sound weiter, wenn ich die App per Home-Button verlasse, und bricht erst dann ab, wenn ich die App manuell aus den "recent apps" entferne.
Davon abgesehen: Ich habe öfters gelesen, dass man keine zwei MediaPlayer-Instanzen gleichzeitig laufen lassen soll, aber bisher nirgends herausgefunden, warum nicht.
Wenn jemand vorschlagen will, stattdessen SoundPool zu benutzen: Habe ich probiert. Hat nochmal ganz eigene Probleme. Dafür würde ich einen eigenen Thread eröffnen, wenn sicher ist, dass mein Vorhaben mit dem Media Player nicht machbar ist. Ich habe spaßeshalber mal eine Umfrage angehängt, um zu sehen, was ihr so benutzen würdet.
Vielen Dank schonmal
Paul
ich bastle an einer Gehörbildungs-App, die darauf beruht, dass ein Bordun-Ton die gesamte Zeit zu hören ist, in der die App im Vordergrund ist. Wenn die App verlassen wird, soll der Ton abbrechen und wenn die App wieder in den Vordergrund kommt, soll der Ton an der Stelle weiterspielen, an der er aufgehört hat.
Ich habe also eine .ogg mit genanntem Ton, der über 18 sekunden ein- und danch wieder ausfadet. Den lade ich so:
Code:
suspend fun playDelayed() {
delay(18000)
mPlayer = MediaPlayer.create(this, R.raw.cbordun)
mPlayer.isLooping = true
mPlayer.start()
}
fun playBordun() {
mediaPlayer = MediaPlayer.create(this, R.raw.cbordun)
mediaPlayer.isLooping = true
mediaPlayer.start()
GlobalScope.launch() {
playDelayed()
}
}
Damit das Ganze wie gewünscht aufhört und wieder anfängt, benutze ich diesen Code:
Code:
override fun onStop() {
super.onStop()
mediaLength = mediaPlayer.currentPosition
mLength = mPlayer.currentPosition
mediaPlayer.pause()
mPlayer.pause()
}
override fun onResume() {
super.onResume()
mediaPlayer.seekTo(mediaLength)
mPlayer.seekTo(mLength)
mediaPlayer.isLooping
mPlayer.isLooping
mediaPlayer.start()
mPlayer.start()
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer.stop()
mPlayer.stop()
mediaPlayer.reset()
mPlayer.reset()
mediaPlayer.release()
mPlayer.release()
}
Das Problem ist nun, dass onStop() ja auch passiert, wenn ich innerhalb der App auf eine andere Activity wechsle. Der Sound bricht dann trotzdem ab. Wenn ich aber den Code bei onStop() auskommentiere, spielt der Sound weiter, wenn ich die App per Home-Button verlasse, und bricht erst dann ab, wenn ich die App manuell aus den "recent apps" entferne.
Davon abgesehen: Ich habe öfters gelesen, dass man keine zwei MediaPlayer-Instanzen gleichzeitig laufen lassen soll, aber bisher nirgends herausgefunden, warum nicht.
Wenn jemand vorschlagen will, stattdessen SoundPool zu benutzen: Habe ich probiert. Hat nochmal ganz eigene Probleme. Dafür würde ich einen eigenen Thread eröffnen, wenn sicher ist, dass mein Vorhaben mit dem Media Player nicht machbar ist. Ich habe spaßeshalber mal eine Umfrage angehängt, um zu sehen, was ihr so benutzen würdet.
Vielen Dank schonmal
Paul