gpt4 book ai didi

android - 如何接收 PlayerNotificationManager 通知按钮的操作,例如停止?

转载 作者:行者123 更新时间:2023-12-03 19:23:47 25 4
gpt4 key购买 nike

我使用 Exoplayer 并与 PlayerNotificationManager 绑定(bind)来处理通知上的玩家操作。它工作得很好,但是当从通知中按下停止按钮时,我想得到一个监听器或接收器。现在,当我单击停止按钮时,播放器被卡住了。

playerNotificationManager = PlayerNotificationManager.createWithNotificationChannel(
this,
"playback_channel",
R.string.exo_download_notification_channel_name,
1,
object : PlayerNotificationManager.MediaDescriptionAdapter {
override fun createCurrentContentIntent(player: Player?): PendingIntent? {
val intent = Intent(context, PlayerExoActivity::class.java)
return PendingIntent.getActivity(
context,
1,
intent,
PendingIntent.FLAG_UPDATE_CURRENT
)
}

override fun getCurrentContentText(player: Player?): String? {
return "Day " + chapterName
}

override fun getCurrentContentTitle(player: Player?): String {
return courseName!!
}

override fun getCurrentLargeIcon(
player: Player?,
callback: PlayerNotificationManager.BitmapCallback?
): Bitmap? {
return largeIcon
}
}
)

这是在 Exoplayer 状态更改时处理其他事情的接收器。
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
if (playbackState == ExoPlayer.STATE_BUFFERING) {
val intent = Intent("com.example.exoplayer.PLAYER_STATUS")
intent.putExtra("state", PlaybackStateCompat.STATE_BUFFERING)
broadcaster?.sendBroadcast(intent)
} else if (playbackState == ExoPlayer.STATE_READY) {
val intent = Intent("com.example.exoplayer.PLAYER_STATUS")
if (playWhenReady) {
intent.putExtra("state", PlaybackStateCompat.STATE_PLAYING)
} else {
intent.putExtra("state", PlaybackStateCompat.STATE_PAUSED)
}
broadcaster?.sendBroadcast(intent)
} else if (playbackState == ExoPlayer.STATE_ENDED) {
val intent = Intent("com.example.exoplayer.PLAYER_STATUS")
intent.putExtra("state", PlaybackStateCompat.STATE_STOPPED)
broadcaster?.sendBroadcast(intent)
}
}

最佳答案

创建自己的 BroadcastReceiver 实现:

class NotificationReceiver : BroadcastReceiver() {

companion object {
val intentFilter = IntentFilter().apply {
addAction(PlayerNotificationManager.ACTION_NEXT)
addAction(PlayerNotificationManager.ACTION_PREVIOUS)
addAction(PlayerNotificationManager.ACTION_PAUSE)
addAction(PlayerNotificationManager.ACTION_STOP)
}
}

override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
PlayerNotificationManager.ACTION_NEXT -> {
}
PlayerNotificationManager.ACTION_PREVIOUS -> {
}
PlayerNotificationManager.ACTION_PAUSE -> {
}
PlayerNotificationManager.ACTION_STOP -> {
//do what you want here!!!
}
}
}
}
然后注册:
registerReceiver(notificationReceiver, NotificationReceiver.intentFilter)
不要忘记注销它(避免内存泄漏):
unregisterReceiver(notificationReceiver)

关于android - 如何接收 PlayerNotificationManager 通知按钮的操作,例如停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58263947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com