2012-04-23 14 views
0

我已經註冊在清單中一個BroadcastReceiver爲機器人:名字=「android.intent.action.MEDIA_BUTTON」 ,我已經註冊與AudioManager接收器使用registerMediaButtonEventReceiver方法。現在我的接收函數定義如下。當媒體按鈕,向上和向下的事件記錄我不能接受我的所有ACTION_MEDIA_BUTTON廣播

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 

回答

0

真正的問題是,你能保證系統發送,你認爲你缺少的事件(logcat的,等等)?當廣播被觸發,它是由系統對目標進行評估,並放置在消息隊列發送到接收器,所以這是不可能的創建事件不會被髮送到您的接收器。

更可能的情況是,某些事件不被因爲你所生成它們的頻率發送。產生廣播框架的許多部分時,系統穩定,這意味着一個新的事件,如果它發送前一個,因爲舊的廣播不再代表系統狀態之前進來可以取消相關的廣播發送事件;屏幕開/關廣播是我知道的一個例子,這種方式的作品。

這意味着你可以保證你將收到代表特定子系統的當前(最新)國家廣播即使你沒有在兩者之間取得每一箇中間事件。注意你的測試總是以「Up」消息結束。

HTH

+0

嘿Devunwired。感謝您的回答。雖然我理解你說的話,我該怎麼辦比如區分人誰雙擊了他的麥克風按鈕,而不是別人誰持有它。 LogCat輸出將類似。現在我想到了,按住按鈕的人會產生更多的事件,這個人雙擊他的按鈕。我可以嘗試一下。儘管讓我知道你是否有其他想法。謝謝! – 2012-04-24 04:17:22