so, I am developing a online music player app with json data. here i am using recycelr view to show list of song. I have to face problem in controlling the media player to pause start in another activity. so I create a new file Audio.kt in this file i have create companion object with all the media player methods. And Now I can use mediaplayer anywhere using Audio.[methods]
here is the Audio.kt file
class Audio {
companion object {
val mp = MediaPlayer()
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
fun loadMediaPlayer(url: String?) {
mp.setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
mp.setDataSource(url)
mp.prepareAsync()
mp.setOnPreparedListener {
mp.start()
MainActivity.progressBar.visibility = View.GONE
MainActivity.slidingPlayBtn.visibility = View.VISIBLE
MainActivity.slidingPlayBtn.setImageResource(R.drawable.ic_pause)
MainActivity.main_pbar.visibility = View.GONE
MainActivity.mainPlayBtn.visibility = View.VISIBLE
val duration: Long = Audio.mp.duration.toLong()
val time = kotlin.String.format(
"%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(duration),
TimeUnit.MILLISECONDS.toSeconds(duration) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
)
MainActivity.totalDur.text = time
MainActivity.seekBar.max = duration.toInt()
}
}
fun startMediaPlayer() {
mp.start()
}
fun pauseMediaPlayer() {
mp.pause()
}
fun stopMediaPlayer() {
if (mp.isPlaying) {
mp.stop()
mp.reset()
}
}
fun isNotPlaying(): Boolean {
return !mp.isPlaying
}
fun mediaCurrPos(): Long {
return mp.currentPosition.toLong()
}
fun mediaPlayerSeek(progress: Int) {
mp.seekTo(progress)
}
fun nextMediaPlayer() {
mp.setNextMediaPlayer(MediaPlayer())
}
}
}
so Now my Question, is this good approach? or I could have to face problems in future
have you any other idea to do this?