gpt4 book ai didi

java - 如何一次响应多个广播? Jelly Bean LG 为一项 Activity 发送两次广播

转载 作者:行者123 更新时间:2023-12-01 13:32:17 24 4
gpt4 key购买 nike

我正在使用我发现的一些工作代码 here在通过 ACTION_HEADSET_PLUG 检测耳机连接状态的服务中。我有两部手机用于测试,一部是 Gingerbread Motorola,一部是 Jelly Bean LG。在 Gingerbread 手机上,一切正常...我插入耳机,我会收到来自 Android 的广播,然后我会执行我的工作。在 Jelly Bean 手机上,每次耳机状态更改时我都会收到两 (2) 次广播,因此我自己的东西会被调用两次。我不是 100% 确定,但我不认为这与粘性广播有关,就好像我应该在 Gingerbread 和 Jellybean 手机上看到相同的行为一样。

在 Jelly Bean 手机上过滤“headset_plug”的所有系统 logcat 消息时,我会在耳机状态更改中看到类似以下内容:

02-01 07:39:11.983: I/MusicBrowser(1739): [MediaPlaybackService.java:mHeadsetReceiver.onReady()] oooooo intentIntent { act=android.intent.action.HEADSET_PLUG flg=0x40000010 (has extras) }
02-01 07:39:12.083: I/MusicBrowser(1739): [MediaPlaybackService.java:mHeadsetReceiver.onReady()] oooooo intentIntent { act=android.intent.action.HEADSET_PLUG flg=0x40000010 (has extras) }

我可能弄错了,但一切似乎都是这款手机在微秒内发送两个广播,而摩托罗拉 Gingerbread 只发送一个。我不知道这是否是一个 Android 错误、版本之间的故意更改、这款特定 LG 手机的问题还是什么,但似乎我需要一种方法,在多次发送相同的广播时仅响应一次。

最佳答案

I need a way to respond only one time when the same broadcast is sent out multiple times

如果您连续收到两个、三个或一百万个广播,其中 state 值与前一个广播相比没有更改,则状态没有更改。仅当状态发生变化时才执行“状态已更改”逻辑,而不仅仅是因为您收到了广播。

我无法确定您是否需要专用的 boolean lastHeadsetState 数据成员来检测状态的变化,或者可以从应用程序中的其他内容推断出最后的状态。

现在,理想情况下,您不需要这种逻辑,因为理想情况下,广播只会在状态发生变化时发出一次。你越接近硬件,就会发现越多的设备怪癖。因此,robustness principle越接近硬件就越重要。

关于java - 如何一次响应多个广播? Jelly Bean LG 为一项 Activity 发送两次广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21498381/

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