我无法收到所有的ACTION_MEDIA_BUTTON广播

时间:2012-04-23 17:55:36

标签: android android-button

我在清单中注册了一个BroadcastReceiver android:name =“android.intent.action.MEDIA_BUTTON” 我使用 registerMediaButtonEventReceiver 方法在AudioManager中注册了接收器。现在我的接收功能定义如下。

public void onReceive(final Context context, Intent intent) {
    Log.e(LOG_TAG, "Entering Receiver");
    KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    int action = event.getAction();
    if (action == KeyEvent.ACTION_DOWN) {
        Log.e(LOG_TAG, "Down");
    } else {
        Log.e(LOG_TAG, "Up");
    }
}

此代码仅在记录媒体按钮上下事件时打印。如果我点击足够快,我就无法注册所有的活动。你有什么问题吗?我的LogCat输出如下。需要注意的是,可以通过按住按钮来重现此输出,尽管我没有这样做。

04-24 01:47:38.136: E/MicReceiver(3769): Entering Receiver
04-24 01:47:38.136: E/MicReceiver(3769): Down
04-24 01:47:38.187: E/MicReceiver(3769): Entering Receiver
04-24 01:47:38.187: E/MicReceiver(3769): Down
04-24 01:47:38.257: E/MicReceiver(3769): Entering Receiver
04-24 01:47:38.257: E/MicReceiver(3769): Down
04-24 01:47:38.281: E/MicReceiver(3769): Entering Receiver
04-24 01:47:38.281: E/MicReceiver(3769): Down
04-24 01:47:38.390: E/MicReceiver(3769): Entering Receiver
04-24 01:47:38.390: E/MicReceiver(3769): Down
04-24 01:47:38.402: E/MicReceiver(3769): Entering Receiver
04-24 01:47:38.402: E/MicReceiver(3769): Up

1 个答案:

答案 0 :(得分:0)

真正的问题是,你能保证系统发送你认为缺少的事件(Logcat等)吗?触发广播时,系统会对目标进行评估,并将其放入消息队列中以发送给接收方,因此创建的事件不太可能不会发送给您的接收方。

更可能的情况是,由于您生成某些事件的频率,因此未发送某些事件。生成广播的框架的许多部分在系统稳定时发送事件,这意味着如果在发送前一个广播之前新事件可以取消挂起广播,因为旧广播不再代表系统状态;屏幕开/关广播就是我所知道的一个例子。

这意味着您可以保证您将接收代表该特定子系统的当前(最新)状态的广播,即使您没有在其间获得每个中间事件。请注意您的测试始终以“向上”消息结束。

HTH