JUNS
JUNS

Reputation: 167

How do I make Exoplayer keeps on running in background?

I'm on creating a simple music player with Exoplayer in Android Kotlin. (Playing local MP3 in storage)

The problem is that the playback music is stopped outside the app and if the mobile turns on sleep mode. So, I tried to implement the Foreground service, but it didn't work.

Below is my code without the part I tried to implement the Foreground service.

Please, let me know how to resolve this issue or how to correctly implement foreground service.


class AudioviewActivity : AppCompatActivity() {

private var player: SimpleExoPlayer? = null
private var playbackPosition = 0L
private var currentWindow = 0
private var playWhenReady = false

override fun onBackPressed() {
    super.onBackPressed()
    player!!.stop()
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_audioview)

}

private fun initializePlayer() {
    if (player == null) {
        player = ExoPlayerFactory.newSimpleInstance(this)

        val userAgent = Util.getUserAgent(this, "Mymusicplayer")
        val mediaSource = ExtractorMediaSource(
            Uri.parse("asset:///trackone.mp3"),
            DefaultDataSourceFactory(this, userAgent), DefaultExtractorsFactory(),
            null, null)

        player!!.prepare(mediaSource)
        player!!.seekTo(currentWindow, playbackPosition)
        player!!.playWhenReady = playWhenReady
        player!!.repeatMode = SimpleExoPlayer.REPEAT_MODE_ONE
    }
}

private fun releasePlayer() {
    player?.let {
        playbackPosition = it.currentPosition
        currentWindow = it.currentWindowIndex
        playWhenReady = it.playWhenReady
        it.release()
        player = null
    }
}

override fun onResume() {
    super.onResume()
    initializePlayer()
}

override fun onRestart() {
    super.onRestart()
    initializePlayer()
}

override fun onStop() {
    super.onStop()
    releasePlayer()
}

}

Upvotes: 1

Views: 2691

Answers (1)

Wahdat Jan
Wahdat Jan

Reputation: 4156

Since you are releasing player in Onstop , So when your app goes in background then Onstop is being called and you are releasing player , So dont release player in OnStop(), remove that part of the code.

Upvotes: 6

Related Questions