Как применить метод запуска / остановки звука с помощью ToggleButton?

Как применить функцию старт / стоп для ToggleButton или обычной Button ?

Проблема в том, что он не останавливается / не запускается после первой попытки! Он работает только один раз (он должен меняться каждый раз, когда пользователь нажимал кнопку).

Музыка ToggleButton

 <ToggleButton android:id="@+id/music" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="ToggleButton" /> 

Фоновая музыкальная функция

 fun BackgroundMusic() { val mp = MediaPlayer.create(this, R.raw.sudani) mp.start() music.setOnClickListener { if (mp.isPlaying) { mp.stop() } else if (!mp.isPlaying) { mp.start() } } } 

Пожалуйста, внимательно изучите javaadoc MediaPlayer . Там вы можете прочитать что-то вроде этого:

Вызов stop () останавливает воспроизведение и приводит к тому, что MediaPlayer в состоянии Started, Paused, Prepared или PlayComCompleted переходит в состояние Stopped.

  • Как только в состоянии «Остановить» воспроизведение не может быть запущено до тех пор, пока не будут вызваны команды prepare () или prepareAsync (), чтобы снова установить объект MediaPlayer в состояние «Готово».

В основном это означает, что вы должны вызвать prepare() прежде чем снова вызвать start() :

 fun BackgroundMusic() { val mp = MediaPlayer.create(this, R.raw.sudani) mp.start() music.setOnClickListener { if (mp.isPlaying) { mp.stop() } else if (!mp.isPlaying) { try { mp.prepare() mp.start() } catch (e: IOException) { e.printStackTrace() } } } }