Вот код, который у меня есть, который создает аудиоплеер и позволяет пользователю моего приложения прослушивать музыку c. Как включить звук в фоновом режиме, когда телефон переходит в режим сна? Я хочу внести минимальные изменения в этот код ниже, насколько это возможно. Это возможно?
class AudioActivity : BaseActivity() {
private lateinit var mediaPlayer: MediaPlayer
private lateinit var runnable: Runnable
private var handler: Handler = Handler()
private var pause: Boolean = false
private var working: Boolean = false
private var removeFromLibrary: Boolean = false;
private fun stop () {
try {
if ((mediaPlayer.isPlaying || pause.equals(true))) {
pause = false
seek_bar.setProgress(0)
mediaPlayer.stop()
mediaPlayer.reset()
mediaPlayer.release()
handler.removeCallbacks(runnable)
tv_pass.text = ""
tv_due.text = ""
}
} catch(e: UninitializedPropertyAccessException) {
// media player is not initialized
}
}
override fun onStop() {
super.onStop()
stop()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_audio)
setProgressBar(R.id.progressBar)
// Start the media player
playBtn.setOnClickListener {
if (!working) {
working = true
if (pause && mediaPlayer.isPlaying) {
playBtn.setImageResource(R.drawable.ic_play_circle_filled);
mediaPlayer.pause()
} else {
playBtn.setImageResource(R.drawable.pausebtn);
if (pause) {
mediaPlayer.seekTo(mediaPlayer.currentPosition)
mediaPlayer.start()
} else {
mediaPlayer = MediaPlayer.create(applicationContext, Uri.parse(intent.getStringExtra("audio")))
mediaPlayer.start()
}
initializeSeekBar()
mediaPlayer.setOnCompletionListener {
Toast.makeText(this, "end", Toast.LENGTH_SHORT).show()
}
}
pause = !pause;
working = false
}
}
prevBtn.setOnClickListener {
if (!working) {
working = true
try {
mediaPlayer.seekTo(mediaPlayer.currentPosition + (-10*1000))
} catch(e: UninitializedPropertyAccessException) {
// media player is not initialized
}
working = false
}
}
nextBtn.setOnClickListener {
if (!working) {
working = true
try {
mediaPlayer.seekTo(mediaPlayer.currentPosition + (10*1000))
} catch(e: UninitializedPropertyAccessException) {
// media player is not initialized
}
working = false
}
}
// Seek bar change listener
seek_bar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
if (b) {
try {
mediaPlayer.seekTo(i * 1000)
} catch(e: UninitializedPropertyAccessException) {
// media player is not initialized
}
}
}
override fun onStartTrackingTouch(seekBar: SeekBar) {
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
}
})
}
// Method to initialize seek bar and audio stats
private fun initializeSeekBar() {
seek_bar.max = mediaPlayer.seconds
runnable = Runnable {
seek_bar.progress = mediaPlayer.currentSeconds
var minutesaddum = "";
var secondsaddum = ""
val minutes = mediaPlayer.currentSeconds / 60
val seconds = mediaPlayer.currentSeconds % 60
if (minutes < 10) {
minutesaddum = "0"
}
if (seconds < 10) {
secondsaddum = "0"
}
tv_pass.text = "${minutesaddum}${minutes}:${secondsaddum}${seconds}"
val diff = mediaPlayer.seconds - mediaPlayer.currentSeconds
var minutesdiffaddum = "";
var secondsdiffaddum = ""
val minutesdiff = diff / 60
val secondsdiff = diff % 60
if (minutesdiff < 10) {
minutesdiffaddum = "0"
}
if (secondsdiff < 10) {
secondsdiffaddum = "0"
}
tv_due.text = "${minutesdiffaddum}${minutesdiff}:${secondsdiffaddum}${secondsdiff}"
handler.postDelayed(runnable, 1000)
}
handler.postDelayed(runnable, 1000)
}
// Creating an extension property to get the media player time duration in seconds
val MediaPlayer.seconds: Int
get() {
return this.duration / 1000
}
// Creating an extension property to get media player current position in seconds
val MediaPlayer.currentSeconds: Int
get() {
return this.currentPosition / 1000
}