- Использование обычной функции setLooping .
Код: Выделить всё
val mediaPlayer = MediaPlayer().apply {
setDataSource(file.inputStream().fd)
isLooping = true
setOnPreparedListener {
it.seekTo(0)
it.start()
}
setOnErrorListener { ... }
prepareAsync()
}
- Совмещение медиаплееров и использование функции setNextMediaPlayer().
Код: Выделить всё
val current: MediaPlayer? = null
val next: MediaPlayer? = null
init {
current = MediaPlayer().apply {
setDataSource(file.inputStream().fd)
setOnPreparedListener {
it.seek(0)
it.start()
}
setOnErrorListener { ... }
prepareAsync()
}
createNextPlayer()
}
fun createNextPlayer() {
next = MediaPlayer.apply() {
setDataSource(file.inputStream().fd)
setOnPreparedListener {
it.seek(0)
current?.let {
it.setNextMediaPlayer(next)
it.setOnCompletionListener {
it?.release()
current = next
createNextPlayer()
}
}
}
}
}
- Использование android.media.SoundPool< /code>
- Использование java.util.Timer для управления моментом начала воспроизведения MediaPlayer< /li>
Я знаю, что эта проблема существует уже ДОЛГОЕ time (в 2011 году впервые было сообщено, что .isLooping = true не выполняет плавный цикл), но я надеюсь, что у кого-нибудь есть секретный метод, который я могу использовать. Все отлично работает на iOS, а тактильные ощущения отлично работают на Android, так что это последнее, над чем мне нужно работать для этой конкретной функции.
Любая помощь приветствуется. п>
Подробнее здесь: https://stackoverflow.com/questions/788 ... ediaplayer