2016-05-15 52 views
1

Android將物理媒體按鈕(在耳機線纜中)轉換爲邏輯操作(如NEXT,STOP,SPEECH QUERY)?Android在何處解釋媒體按鈕?

有沒有辦法改變這個任務(即創建其他動作)?

注:我試圖安裝MediaButtonReceiver。但它只能看到解釋的密鑰。所以我只能看到按鍵,在鍵被釋放之前不會觸發SPEECH QUERY。

更新:只要我的應用程序處於前景中,我就可以在onDispatchKeyEvent中看到原始鍵事件。但是在鎖定屏幕處於活動狀態時如何獲取它們?

MediaButtonReceiver在應用程序處於後臺時被調用(但僅在該鍵被釋放後)。

回答

1

在您的應用程序開始播放任何音頻之前,它應該爲它將使用的流保留音頻焦點。這是通過調用requestAudioFocus()完成的,如果請求成功,將返回AUDIOFOCUS_REQUEST_GRANTED。

您必須指定您正在使用的流,以及您是否期望需要瞬態或永久音頻焦點。

// Request audio focus for playback 
int result = am.requestAudioFocus(afChangeListener, 
         // Use the music stream. 
         AudioManager.STREAM_MUSIC, 
         // Request permanent focus. 
         AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); 

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
// Start playback. 
} 

檢查更多information

要在APP中使用實時事件,RTP是最好的選擇。它爲RTP(實時傳輸協議),allowing應用程序提供API以管理按需或交互式數據流。

+0

問題保持不變。我只看到按鈕已經釋放時發送給我的短按鍵(與鍵釋放一起)。它們包含時間戳,但我需要實時的事件。 –

+0

我看不到RTP API如何給媒體按鈕添加新的訪問權限。你有一個例子嗎? –