我有一个android项目,需要在后台播放音乐。我相信使用服务是正确的选择,因此我通过以下方式设置了一个服务:
internal class Song : Service() {
private var mediaPlayer: MediaPlayer? = null
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
mediaPlayer = MediaPlayer.create(this, R.raw.song1)
mediaPlayer!!.isLooping = true // Set looping
mediaPlayer!!.setVolume(100f, 100f)
}
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
mediaPlayer!!.start()
return startId
}
override fun onDestroy() {
mediaPlayer!!.stop()
mediaPlayer!!.release()
}
}
我对此进行了测试,音乐在活动之间完美运行,没有错误。然而,当用户让应用程序在后台运行时(我相信它要么暂停要么最小化?),它仍然播放音乐。我需要应用程序在应用程序暂停时不播放音乐,但如果用户重新打开它,则继续播放音乐。经过一番谷歌搜索后,大多数答案都与使用 onPause() 和 onResume() 有关。然而这些方法在服务中不起作用。
那么还有其他选择吗?如果是这样,我如何将它们应用到我的服务中?
如果没有,有什么想法可以编写解决方法吗?
提前致谢, 上州
您的应用程序设置如何?是一项活动还是多项活动?
如果您不想在后台播放它并且它是单个活动,那么根本不要使用服务。只需在您的 Activity 中播放它,然后在 onPause 中开始/停止音乐即可。
如果你的应用程序是多个Activity,并且你希望它在所有Activity中播放,那么Service仍然适用。在这种情况下,您需要使用 bindService 而不是 startService 来启动它,因此一旦最后一个 Activity 解除绑定,它就会停止。每个Activity应该在onStart中绑定它并在onStop中取消绑定。这应该会在您在活动之间切换时保持其播放,但在应用程序最小化时停止它。