Здравствуйте, я изучаю Media Play для себя и хочу узнать, могу ли я показать уведомление о прогрессе Media Player на экране блокировки. Для этого у меня есть этот класс активности:
@Suppress("DEPRECATION")
class MainActivity : Activity() {
private var mediaPlayer: MediaPlayer? = null
override fun onPause() {
super.onPause()
killMediaPlayer()
}//onPause ends
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
showNotification(0, 0)
playButton.setOnClickListener {
if (mediaPlayer != null &&
mediaPlayer!!.isPlaying) {
Toast.makeText(applicationContext, "Already Playing!", Toast.LENGTH_SHORT).show()
} else {
initMediaPlayer()
}
}//playButton.setOnClickListener ends
}//onCreate ends
private fun initMediaPlayer() {
mediaPlayer = MediaPlayer().apply {
setAudioStreamType(AudioManager.STREAM_MUSIC)
setDataSource("https://www.radiantmediaplayer.com/media/bbb-360p.mp4")
prepare() // might take long! (for buffering, etc)
start()
}//apply ends
initMediaPlayerListenerEvents()
}//initMediaPlayer ends
private fun initMediaPlayerListenerEvents() {
if (mediaPlayer != null) {
mediaPlayer!!.setOnInfoListener { mp, what, extra ->
Log.e("streaX", "mediaPlayerInfo:::what:::$what".plus(" extra:::$extra"))
false
}
mediaPlayer!!.setOnBufferingUpdateListener { mp, percent ->
// Log.e("streaX", "mediaPlayerPercent:::$percent")
// showOreoBasedNotification(applicationContext, "Singing", "Percent:::" + percent)
}
mediaPlayer!!.setOnErrorListener { mp, what, extra ->
Log.e("streaX", "mediaPlayerError:::what:::$what".plus(" extra:::$extra"))
true
}
Log.e("streaX", "mediaPlayerDuration:::${mediaPlayer!!.duration}")
val mHandler = Handler()
runOnUiThread(object : Runnable {
override fun run() {
if (mediaPlayer != null) {
val mCurrentPosition: Int = mediaPlayer!!.currentPosition / 1000
Log.e("streaX", "mediaPlayerPosition:::$mCurrentPosition")
notification!!.setProgress((mediaPlayer!!.duration) / 1000, mCurrentPosition, false)
notificationManager.notify(1289, notification!!.build())
}
mHandler.postDelayed(this, 1000)
}
})
}//media player not null
}//initMediaPlayerListenerEvents ends
private var notification: NotificationCompat.Builder? = null
private val notificationId = "AudioStreamer12891226-3"
private val notificationName = "AudioStreamer-Test-3"
private lateinit var notificationManager: NotificationManager
private fun showNotification(durationTotal: Int, mCurrentPosition: Int) {
createNotificationChannel()
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notification = NotificationCompat.Builder(applicationContext, notificationId)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("Playing BG Music")
.setContentText("Media Player Playing...")
.setSound(null)
.setOnlyAlertOnce(true)
.setProgress(durationTotal, mCurrentPosition, false)
.setPriority(NotificationCompat.PRIORITY_LOW)
notificationManager.notify(1289, notification!!.build())
}//showNotification ends
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val serviceChannel = NotificationChannel(
notificationId,
notificationName,
NotificationManager.IMPORTANCE_DEFAULT
)
val manager = getSystemService(NotificationManager::class.java)
manager!!.createNotificationChannel(serviceChannel)
}
}//createNotificationChannel ends
private fun killMediaPlayer() {
if (mediaPlayer != null &&
mediaPlayer!!.isPlaying) {
mediaPlayer!!.stop()
mediaPlayer!!.release()
mediaPlayer = null
}//media player null check ends
}//killMediaPlayer ends
}//class ends
Все работает нормально, и уведомление появляется, когда приложение запускается, и когда я нажимаю кнопку, прогресс обновляется в соответствии с потоками Media Player. Но проблема в том, что когда я блокирую устройство, уведомление вообще не появляется. Я использую Samsung J5 для тестирования кода моего приложения.
Может кто-нибудь сказать мне, что я делаю неправильно, и если возможно, что устройство Samsung J5 с Oreo Android будет показывать уведомление на экране блокировки?
(я хочу показать этот тип уведомления)