У меня есть служба, которая запускает музыку 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()}
}
}