[Android]MEDIA_BUTTON使用指南

MEDIA BUTTON是幹什麼的? 在手機,有線耳機或無線藍牙耳機上有Media playback button ,好比play, pause,stop, next等,Android 系統在收到這些按鍵後,會廣播android.intent.action.MEDIA_BUTTON 這個Intent,裏面就包含了各類鍵(play, pause,stop 等)。 還有一種狀況是Screen lock上的遠程播放控制界面(Music widget),在點擊play, pause, next Button時,Android系統也會廣播此Intent. 相應的App在收到此廣播後,能夠作出對應的反應。html

如何對media button 做出反應?android

  1. 註冊

<receiver android:name=".RemoteControlReceiver"> <intent-filter> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver>編程

指南:Android裏是多任務的環境,會有多個App要求去監聽MEDIA_BUTTON intent,並且該註冊是排他性的, 這意味着最後一個註冊MEDIA_BUTTON intent receiver的app纔會收到此廣播。 App必須編程來控制何時開始須要接收此廣播。 通常是開始播放Music後,須要註冊監聽,而在中止播放後取消監聽。 最好的辦法是在獲取AudioFocus後註冊此監聽, 而在失去AudioFocus時取消此監聽!!! 若是別的App還在播放Music,你的app又沒有得到AudioFocus的狀況下去註冊此監聽,這屬於搗亂行爲,Android framework (AudioService)並不會來阻止你這樣作,但這會影響到用戶體驗。app

代碼註冊以及取消監聽方式: AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); ...ide

// Start listening for button presses am.registerMediaButtonEventReceiver(RemoteControlReceiver); ...code

// Stop listening for button presses am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);htm

  1. 具體處理代碼 public class RemoteControlReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) { // Handle key press. //具體處理 } } } } 注意在收到ACTION_MEDIA_BUTTON這個Intent時,必須從EXTRA_KEY_EVENT解出key code檢查究竟是按了什麼鍵,好比KEYCODE_MEDIA_PLAY_PAUSE, KEYCODE_MEDIA_NEXT等

參考自: http://developer.android.com/training/managing-audio/volume-playback.htmlget

相關文章
相關標籤/搜索