Я использую MediaPlayer в сервисе, который должен воспроизводиться только при открытии определенных фрагментов.Он должен остановить / приостановить воспроизведение, когда нажата домашняя кнопка.
Внутри этих фрагментов у меня есть кнопка, которая перезагружает тот же фрагмент, но с различными активированными / деактивированными кнопками.Когда эта кнопка нажата, медиаплеер останавливается и не запускается снова, когда фрагмент создается заново.Я не могу понять, почему он не запускается снова.
Кнопка выглядит так:
nextbutton.setOnClickListener {
FullscreenActivity.level.levelSelection(FullscreenActivity.makeLevel.nextlevelsetup)
NavHostFragment.findNavController(fragment5).navigate(R.id.action_global_learningmode)
}
Во фрагменте onStop () я вызываю это:
var sIntent = Intent(mContext, BordunService::class.java)
sIntent.putExtra("Pause", "Ein")
activity?.startService(sIntent)
и в его onResume () я играю снова:
var sIntent = Intent(mContext, BordunService::class.java)
sIntent.putExtra("Play", "Ein")
activity?.startService(sIntent)
Класс обслуживания такой:
open class BordunService : Service() {
private lateinit var mPlayer: MediaPlayer
private var mLength = 0
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onCreate() {
mPlayer = MediaPlayer.create(this, R.raw.accordeon_tief)
}
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
if (intent.hasExtra("Play")) {
if (mLength != 0) {
mPlayer.seekTo(mLength)
mPlayer.start()
} else {
playBordun()
}
}
if (intent.hasExtra("Pause")) {
mLength = mPlayer.currentPosition
mPlayer.pause()
}
if (intent.hasExtra("Stop")) {
mPlayer.stop()
mPlayer.release()
stopSelf()
}
return START_NOT_STICKY
}
override fun onDestroy() {
stopSelf()
}
private fun playBordun() {
fun playMPlayer() {
mPlayer.setOnCompletionListener(object: MediaPlayer.OnCompletionListener {
override fun onCompletion(p0: MediaPlayer?) {
println("completem")
selectMBordun()
}
})
mPlayer.setOnPreparedListener(object:MediaPlayer.OnPreparedListener {
override fun onPrepared(p0: MediaPlayer?) {
println("preparedm")
mPlayer.start()
}
})
} GlobalScope.launch {
playMPlayer()
}
}
fun selectMBordun() {
println("selectionstarted")
mPlayer.release()
val randomGenerator = Random()
val bordunInt = randomGenerator.nextInt(3) + 1
when (bordunInt) {
1 -> {
mPlayer = MediaPlayer.create(this, R.raw.accordeon_tief)
playM()
}
2 -> {
mPlayer = MediaPlayer.create(this, R.raw.cello)
playM()
}
3 -> {
mPlayer = MediaPlayer.create(this, R.raw.tuba)
playM()
}
}
}
fun playM() {
println("playstartedM")
mPlayer.setOnPreparedListener(object:MediaPlayer.OnPreparedListener {
override fun onPrepared(p0: MediaPlayer?) {
println("preparedplayerM")
mPlayer.start()
}
})
mPlayer.setOnCompletionListener(object: MediaPlayer.OnCompletionListener {
override fun onCompletion(p0: MediaPlayer?) {
println("completeplayerM")
selectMBordun()
}
})
}
}