android 服务中的 onPause 替代方案?

问题描述 投票:0回答:1

我有一个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() 有关。然而这些方法在服务中不起作用。

那么还有其他选择吗?如果是这样,我如何将它们应用到我的服务中?

如果没有,有什么想法可以编写解决方法吗?

提前致谢, 上州

android kotlin android-service android-mediaplayer
1个回答
0
投票

您的应用程序设置如何?是一项活动还是多项活动?

如果您不想在后台播放它并且它是单个活动,那么根本不要使用服务。只需在您的 Activity 中播放它,然后在 onPause 中开始/停止音乐即可。

如果你的应用程序是多个Activity,并且你希望它在所有Activity中播放,那么Service仍然适用。在这种情况下,您需要使用 bindService 而不是 startService 来启动它,因此一旦最后一个 Activity 解除绑定,它就会停止。每个Activity应该在onStart中绑定它并在onStop中取消绑定。这应该会在您在活动之间切换时保持其播放,但在应用程序最小化时停止它。

© www.soinside.com 2019 - 2024. All rights reserved.