Показывать уведомление медиаплеера на экране блокировки - PullRequest
0 голосов
/ 04 мая 2020

Здравствуйте, я изучаю 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 будет показывать уведомление на экране блокировки?

(я хочу показать этот тип уведомления)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...