(科特琳)MediaPlayer不要暂停

时间:2020-04-28 04:14:15

标签: android kotlin android-mediaplayer media-player

我有运行音乐的服务。我需要能够通过不同的活动控制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()}
    }
}

在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()}
    }
}

0 个答案:

没有答案