首页 > 解决方案 > 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 天。

任何帮助,将不胜感激。

标签: androidkotlinbroadcastreceiver

解决方案


你完全正确。我不止一次发送相同的广播。我在一个旨在淡出音乐的可运行文件中发现了它。


推荐阅读