android - LocalBroadcast Receiver Kotlin 收到多条消息
问题描述
我已经阅读了很多关于广播接收器重复接收相同消息的问题的答案。解决方案主要是在 OnResume 中注册接收器,在 OnPause 中取消注册。这在我的代码中是不可能的。我有 UI(各种媒体播放器)和绑定的 Musicservive.. 除了这个多条消息接收问题外,一切都运行良好。当媒体文件完成时,Musicservice 会发送一条消息“Cue Completed”,接收方正在接收该消息。然后我需要确定下一个媒体是否需要直接播放或等待按下按钮。我可以让它毫无问题地播放下一段,但是,如果我不希望它播放下一段音乐,只需不断收到相同的消息并转发直到结束。一些代码
mp.setOnCompletionListener {
if (loop > 0 && loopCount<loop+1) {
Toast.makeText(this, "$loopCount of $loop loops", Toast.LENGTH_LONG).show()
getCurrentsoundPosition()
runCue(position)
Log.i("loopcount", "$loopCount ")
loopCount++
}else {
if(trigger=="Play-Next" || trigger=="Fade Play-Next"){
mpStatus = "cue_completed"
sendMediaPlayerStatus()}else
{mpStatus="Stopped"
sendMediaPlayerStatus()
}
Log.i("status after completion", mpStatus)
loopCount=0
}
}
以上在我的音乐服务中。
以下来自我的 UI 活动 OnCreate
val localBroadcastManager = LocalBroadcastManager.getInstance(this)
localBroadcastManager.registerReceiver(object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// try {
Log.i("FullScreenActivity ", "Service got intent with action: ${intent.action} and status mp ${intent.getStringExtra("status")}")
mpStatus = intent.getStringExtra("status")
when (mpStatus) {
"cue_completed" -> {
goToNext()
tvStatus.clearAnimation()
if ( AutoPlayNext == true) {
btnPlayCue.callOnClick()
}else{
myMusicService?.stopCue()
}
}
"PAUSED" -> tvStatus.text = "PAUSED"
"IS_PLAYING" -> {tvStatus.text = "PLAYING"
updateSeekbar()}
"Fading Out" -> tvStatus.text = "FADING OUT"
}
}
}, IntentFilter(BoundMusicService.ACTION_MEDIAPLAYER_STATUS))
当我运行代码时,这是来自 logcat 的示例
2019-03-04 16:53:43.111 1194-1235/? I/ActivityManager:显示 com.ktdevelopement.nigelmccullagh.qsoundkt/com.ktdevelopment.nigelmccullagh.qsoundkt.FullScreenActivity:+225ms 2019-03-04 16:53:46.369 29716-29716/? I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp IS_PLAYING 2019-03-04 16:53:48.876 29716-29716/?I/FullScreenActivity:服务有行动的意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:51.791 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:52.238 29716-29716/?I/FullScreenActivity:服务有行动的意图:媒体播放器状态和状态 mp IS_PLAYING 2019-03-04 16:53:54.350 29716-29716/?I/FullScreenActivity:服务有行动的意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:54.490 29716-29716/? I/FullScreenActivity:服务有行动的意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:55.308 29716-29716/?I/FullScreenActivity:服务有行动的意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:55.503 29716-29716/?I/FullScreenActivity:服务有行动的意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:55.986 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.059 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.212 29716-29716/?I/FullScreenActivity:服务有行动的意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.245 29716-29716/? I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.278 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:56.279 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp IS_PLAYING 2019-03-04 16:53:56.281 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.477 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 已停止 媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.278 29716-29716/? I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:56.279 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp IS_PLAYING 2019-03-04 16:53:56.281 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.477 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 已停止 媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.278 29716-29716/? I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 淡出 2019-03-04 16:53:56.279 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp IS_PLAYING 2019-03-04 16:53:56.281 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.477 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 已停止 媒体播放器状态和状态 mp IS_PLAYING 2019-03-04 16:53:56.281 29716-29716/? I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.477 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 已停止 媒体播放器状态和状态 mp IS_PLAYING 2019-03-04 16:53:56.281 29716-29716/? I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp cue_completed 2019-03-04 16:53:56.477 29716-29716/?I/FullScreenActivity:服务有行动意图:媒体播放器状态和状态 mp 已停止
令我沮丧的是,我的应用程序的其余部分运行良好,但我终其一生都无法解决这个问题。我已经为此工作了 3 天。
任何帮助,将不胜感激。
解决方案
你完全正确。我不止一次发送相同的广播。我在一个旨在淡出音乐的可运行文件中发现了它。
推荐阅读
- reactjs - 为什么在使用酶的“挂载”功能时,我的玩笑模拟功能不会与模拟对象一起执行?
- python - cx_Freeze 缺少模块
- database - Symfony4 具有相同结构的多个数据库
- python - 获取像素位置
- javascript - 使用扩展运算符的 ES6 对象克隆也在修改输入
- javascript - 使用 mousemove 事件转换 jQuery 眼瞳跟踪器
- node.js - 如何在 Ubuntu 18.10 中安装 Node Js?
- jqgrid - JQGrid 本地搜索多列
- c# - “您的意思是运行 dotnet SDK 命令吗?请在 Windows 命令提示符下安装 dotnetsdk”
- python - 通过蓝牙将音乐从带有 Ubuntu 的 PC 流式传输到音频设备