您好,我正在学习自己的媒体播放功能,并对是否可以在锁定屏幕上显示媒体播放器进度通知感到好奇。为此,我有一个活动类:
@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 Streams更新。但是问题是当我锁定设备时,通知根本不会出现。我正在使用Samsung J5来测试我的应用程序代码。
有人可以告诉我我做错了什么吗,如果装有Oreo Android的Samsung J5设备是否有可能在锁定屏幕上显示通知?
(我想显示这种通知)