(Kotlin) MediaPlayer не делает паузу - PullRequest
1 голос
/ 28 апреля 2020

У меня есть служба, которая запускает музыку c. И мне нужна возможность контролировать MediaPlayer из разных видов деятельности. Поэтому я написал сервис таким образом, чтобы из разных действий просто вызывал myService? .MusicControl ("ACTION_HERE"). Но по какой-то причине запуск работает, но другие действия (пауза, возобновление и остановка) не работают.

MusicService.kt

class MusicService : Service() {
    private val myBinder = MyLocalBinder()

    override fun onCreate() {
        super.onCreate()
        musicControl("play")
    }

    override fun onBind(intent: Intent?): IBinder? {
        return myBinder
    }

    inner class MyLocalBinder : Binder() {
        fun getService() : MusicService {
            return this@MusicService
        }
    }

    fun musicControl(action: String) {
        var player = MediaPlayer.create(this, R.raw.slunky)
        var length = 0
        if (player != null) {
            if (action == "play") {
                player.isLooping = true
                player.setVolume(1f, 1f)
                player.start()
            } else if (action == "pause") {
                length = player.currentPosition;
                player.pause()
            } else if (action == "resume") {
                player.seekTo(length)
                player.start()
            } else if (action == "stop") {
                player.stop()
            }
        } else {Toast.makeText(this, "NULL", Toast.LENGTH_SHORT).show()}
    }
}

OnCreate in MainActivity

val musicIntent = Intent(this, MusicService::class.java)
startService(musicIntent)
bindService(intent, myConnection, Context.BIND_AUTO_CREATE)

UPD: рабочий код. Спасибо, NamNH.

class MusicService : Service() {
    private val myBinder = MyLocalBinder()
    private var player: MediaPlayer? = null
    private var length = 0

    override fun onCreate() {
        super.onCreate()
        player = MediaPlayer.create(this, R.raw.slunky)
        musicControl("play")
    }

    override fun onBind(intent: Intent?): IBinder? {
        return myBinder
    }

    inner class MyLocalBinder : Binder() {
        fun getService() : MusicService {
            return this@MusicService
        }
    }

    fun musicControl(action: String) {
        if (player != null) {
            if (action == "play") {
                player!!.isLooping = true
                player!!.setVolume(1f, 1f)
                player!!.start()
            } else if (action == "pause") {
                length = player!!.currentPosition;
                player!!.pause()
            } else if (action == "resume") {
                player!!.seekTo(length)
                player!!.start()
            } else if (action == "stop") {
                player!!.stop()
            }
        } else {Toast.makeText(this, "NULL", Toast.LENGTH_SHORT).show()}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...