當前位置:編程學習大全網 - 編程語言 - Android怎樣監聽藍牙耳機的按鍵事件

Android怎樣監聽藍牙耳機的按鍵事件

其實對於Android系統,每次按鍵只會有壹個唯壹「鍵值」響應,使用起來感覺會模模糊糊的,但是其實對於系統來說是很清晰的。

AVRCP全稱(Audio/Video?Remote?Control?Profile),是藍牙協議中的壹個profile。從名字上就可以看出主要應用於Audio/Video控制。每個按鍵並不是獨立的,上-曲/下壹曲是在正在播放音樂的時候才會有效,即才會向Android發送「鍵值」。

基於按鍵從Linux到Android分析具體對於的鍵值:

Linux掃描碼?功能映射字串Android鍵值

00c8?200 開始放音樂?MEDIA_PLAY?KEYCODE_MEDIA_PLAY

00c9?201 停止放音樂?MEDIA_PAUSE?KEYCODE_MEDIA_PAUSE

00a3?163 下壹曲?MEDIA_NEXT?KEYCODE_MEDIA_NEXT

00a5?165 上-曲?MEDIA_PREVIOUS?KEYCODE_MEDIA_PREVIOUS

Android應用代碼,完整測試應用:TeskKey。

總結:1號鍵會交替發送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE;2/3號鍵會在播放音樂時分別發送KEYCODE_MEDIA_PREVIOUS/.KEYCODE_MEDIA_NEXT。如果想要把藍牙耳機上的按鍵利用起來,可以在接收到KEYCODE_MEDIA_PLAY時播放?無聲音樂?以使能2/3號鍵。這樣就能完整接收3種鍵值了自行控制了。這個具體自行設計(測試代碼已經更新包含了)。

註:這種實現並不壹定通用,比如我在深度定制的MIUI中測試,盡管啟動的TestKey應用,系統自帶的音樂播放器仍然能同時響應鍵值。

更新:

已經更新TestKey源碼,添加對藍牙耳機按鍵的監聽,實現方法就是上述中推測的方法,已經成功驗證過了。播放音樂參考《Android多媒體開發--資源文件播放》。效果圖:

需要說明壹點的是,程序帶了兩個音樂文件在/res/raw中,默認播放的是lapple.mp3壹個有聲音的mp3音樂文件,silence10sec.mp3是壹個無聲音的10秒鐘音樂文件,實際應用中可以使用它。

問與答

1.這個只能在播放音樂的狀態下才能監聽到麽?

答:根據上述的原理,這些按鍵也僅僅是應用在控制媒體時使用;且根據實際驗證沒有播放音樂時藍牙耳機的2/3號鍵是並沒有向Android設備發送鍵值(從底層Linux來看)。綜上所述,需要通過播放音樂來實現激活其向Android設備發送鍵值,針對這種情況可以播放壹個「沒有聲音」的音樂文件來實現,這樣既可以監聽到2/3號鍵又可以不影響其它聲音的輸出。可以在前臺時播放音樂,後臺停止播放。

2.我現在主要是想監聽得到開關鍵(1號鍵)。 在做壹個按下藍牙開關鍵後啟動壹個語音識別的功能?

答:在我的測試條件下,1號鍵是可以正常監聽到的。1號鍵會交替發送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE鍵值。這個鍵不需要模擬播放音樂就可以正常的監聽到。

3.?4號按鍵的監聽方法

答:所謂的4號按鍵,也就是指本文中的所測試型號的藍牙耳機上並沒有,但有可能其它型號的藍牙耳機上有。我沒有辦法測試驗證,所以這裏就簡單敘述壹下「新按鍵」的鍵值確定思路:1.先使用TestKey測試應用測試按鍵,測試Android上層是否可以得到對應鍵值。2.如果沒有得到,那麽就使用adb?shell?getevent來看Linux底層可以不可以得到鍵值。然後根據按鍵從Linux到Android來確定Android上層使用的鍵值碼到底是多少。(當然,如果妳實在不知道如何監聽,把藍牙耳機寄給我,我給妳確定也行。:))

註:其實上述文章完全是根據按鍵從Linux到Android測試確定下來的。那是篇文章是剝開Android外殼來看「按鍵」事件的流程的,方法適用於所有輸入事件:各種按鍵/觸摸/物理鍵盤/鼠標等待輸入設備。沒有壹定的Linux開發經驗很難看懂和理解。

4.?Android後臺監聽按鍵怎麽實現

或:如何啟動壹次應用後在後臺壹直監聽播放鍵?因為有這樣壹個場景?在用戶開車的時候需按壹下開關鍵就啟動語音識別的功能。

這個問題其實已經超出了本文討論的範圍,是Android系統對應用層的鍵盤事件(按鍵)的分發的問題了。正常情況下,按鍵只會向當前最端的應用分發鍵盤事件,也就是說在後臺妳邊音量鍵都監聽不了。

但是既然這種情況(後臺應用監聽按鍵)的需求存在,那麽就壹定有它存在的道理。比如「相機鍵」,按下後直接調出相機到最前臺。從表面上看是相機響應了按鍵,但是從實現方法上來看,並不是通過鍵值來操作,必須通過其它方法,比如廣播或者其它等等。?

明白了其中的道理後,那麽想要實現就好辦了。先看這個按鍵有沒有廣播,如要有接聽系統中發出來的廣播;如果沒有那麽對於定制系統可以自己在系統中添加壹個廣播;總之,正常渠道是沒有辦法在後臺監聽壹些不應該是妳監聽到的按鍵的。

更:查了壹下,這個按鍵是有廣播的。這樣就可以後臺響應了(不需要C/不需要root)。例子我就不試了,見Android官方例子RandomMusicPlayer。

其中的重點是這個廣播android.intent.action.MEDIA_BUTTON。

  • 上一篇:安徽國防科技職業學院王牌專業
  • 下一篇:請問3DMAX遊戲和maya影視動畫哪個比較有發展前途呢? 3D和maya學哪個更好些,哪個就業形勢更好
  • copyright 2024編程學習大全網