怎樣監(jiān)聽藍(lán)牙耳機(jī)的按鍵事件
寫在前面:
直接想要代碼非常easy,你直接把滾動(dòng)欄拉到最底端就能夠看到。假設(shè)想要十分地了解為什么,那就依照我規(guī)劃的一步一步來理解。下面測試環(huán)境以手頭上有的「+紅米手機(jī)」。
1.藍(lán)牙耳機(jī)的使用
藍(lán)牙耳機(jī)的使用說明書中都會(huì)有相關(guān)的具體使用說明,這里揀重點(diǎn)說明一下。除了電源開關(guān),耳機(jī)上一般有三個(gè)鍵。例如以下所看到的:
/2/text/==/font///400/fill/==//70//" alt="\">
鍵值」響應(yīng)。使用起來感覺會(huì)模模糊糊的,可是事實(shí)上對于系統(tǒng)來說是非常清晰的。
AVRCP全稱(Audio/ofile)。是藍(lán)牙協(xié)議中的一個(gè)。從名字上就能夠看出主要應(yīng)用于Audio/Video控制。每一個(gè)按鍵并非獨(dú)立的。上-曲/下一曲是在正在播放音樂的時(shí)候才會(huì)有效,即才會(huì)向發(fā)送「鍵值」。
基于按鍵從Linux到分析詳細(xì)對于的鍵值:
Linux掃描碼功能映射字串鍵值
開始放音樂
停止放音樂
下一曲
上-曲
應(yīng)用代碼,完整測試應(yīng)用:。
總結(jié):號(hào)鍵會(huì)交替發(fā)送/;2/3號(hào)鍵會(huì)在播放音樂時(shí)分別發(fā)送US/.。假設(shè)想要把藍(lán)牙耳機(jī)上的按鍵利用起來。能夠在接收到時(shí)播放無聲音樂以使能2/3號(hào)鍵。這樣就能完整接收3種鍵值了自行控制了。這個(gè)詳細(xì)自行設(shè)計(jì)(測試代碼已經(jīng)更新包括了)。
注:這樣的實(shí)現(xiàn)并不一定通用,比方我在深度定制的MIUI中測試,雖然啟動(dòng)的應(yīng)用,系統(tǒng)自帶的音樂播放器仍然能同一時(shí)候響應(yīng)鍵值。
更新:
已經(jīng)更新源代碼,加入對藍(lán)牙耳機(jī)按鍵的監(jiān)聽。實(shí)現(xiàn)方法就是上述中猜測的方法,已經(jīng)成功驗(yàn)證過了。播放音樂參考《多媒體開發(fā)--資源文件播放》。效果圖:
須要說明一點(diǎn)的是,程序帶了兩個(gè)音樂文件在/res/raw中,默認(rèn)播放的是.mp3一個(gè)有聲音的mp3音樂文件,.mp3是一個(gè)無聲音的10秒鐘音樂文件,實(shí)際應(yīng)用中能夠使用它。
問與答
1.這個(gè)僅僅能在播放音樂的狀態(tài)下才干監(jiān)聽到么?
答:依據(jù)上述的原理,這些按鍵也不過應(yīng)用在控制媒體時(shí)使用。且依據(jù)實(shí)際驗(yàn)證沒有播放音樂時(shí)藍(lán)牙耳機(jī)的2/3號(hào)鍵是并沒有向設(shè)備發(fā)送鍵值(從底層Linux來看)。綜上所述手機(jī)音樂播放器源代碼,須要通過播放音樂來實(shí)現(xiàn)激活其向設(shè)備發(fā)送鍵值,針對這樣的情況能夠播放一個(gè)「沒有聲音」的音樂文件來實(shí)現(xiàn),這樣既能夠監(jiān)聽到2/3號(hào)鍵又能夠不影響其他聲音的輸出。能夠在前臺(tái)時(shí)播放音樂,后臺(tái)停止播放。
2.我如今主要是想監(jiān)聽得到開關(guān)鍵(1號(hào)鍵)。 在做一個(gè)按下藍(lán)牙開關(guān)鍵后啟動(dòng)一個(gè)語音識(shí)別的功能?
答:在我的測試條件下,1號(hào)鍵是能夠正常監(jiān)聽到的。1號(hào)鍵會(huì)交替發(fā)送/鍵值。
這個(gè)鍵不須要模擬播放音樂就能夠正常的監(jiān)聽到。
3.4號(hào)按鍵的監(jiān)聽方法
答:所謂的4號(hào)按鍵,也就是指本文中的所測試型號(hào)的藍(lán)牙耳機(jī)上并沒有,但有可能其他型號(hào)的藍(lán)牙耳機(jī)上有。我沒有辦法測試驗(yàn)證。所以這里就簡單敘述一下「新按鍵」的鍵值確定思路:1.先使用測試應(yīng)用測試按鍵,測試上層能否夠得到相應(yīng)鍵值。
2.假設(shè)沒有得到,那么就使用來看Linux底層能夠不能夠得到鍵值。然后依據(jù)按鍵從Linux到來確定上層使用的鍵值碼究竟是多少。(當(dāng)然。假設(shè)你實(shí)在不知道怎樣監(jiān)聽,把藍(lán)牙耳機(jī)寄給我。我給你確定也行。
:))
注:事實(shí)上上述文章全然是依據(jù)按鍵從Linux到測試確定下來的。那是篇文章是剝開外殼來看「按鍵」事件的流程的。方法適用于全部輸入事件:各種按鍵/觸摸/物理鍵盤/鼠標(biāo)等待輸入設(shè)備。沒有一定的Linux開發(fā)經(jīng)驗(yàn)非常難看懂和理解。
4.后臺(tái)監(jiān)聽按鍵怎么實(shí)現(xiàn)
或:怎樣啟動(dòng)一次應(yīng)用后在后臺(tái)一直監(jiān)聽播放鍵由于有這樣一個(gè)場景在用戶開車的時(shí)候需按一下開關(guān)鍵就啟動(dòng)語音識(shí)別的功能。
這個(gè)問題事實(shí)上已經(jīng)超出了本文討論的范圍,是系統(tǒng)相應(yīng)用層的鍵盤事件(按鍵)的分發(fā)的問題了。正常情況下。按鍵僅僅會(huì)向當(dāng)前最端的應(yīng)用分發(fā)鍵盤事件。也就是說在后臺(tái)你邊音量鍵都監(jiān)聽不了。
可是既然這樣的情況(后臺(tái)應(yīng)用監(jiān)聽按鍵)的需求存在,那么就一定有它存在的道理。
比方「相機(jī)鍵」手機(jī)音樂播放器源代碼,按下后直接調(diào)出相機(jī)到最前臺(tái)。從表面上看是相機(jī)響應(yīng)了按鍵,可是從實(shí)現(xiàn)方法上來看,并非通過鍵值來操作。必須通過其他方法,比方廣播或者其他等等。
明確了當(dāng)中的道理后。那么想要實(shí)現(xiàn)就好辦了。先看這個(gè)按鍵有沒有廣播,如要有接聽系統(tǒng)中發(fā)出來的廣播;假設(shè)沒有那么對于定制系統(tǒng)能夠自己在系統(tǒng)中加入一個(gè)廣播。總之,正常渠道是沒有辦法在后臺(tái)監(jiān)聽一些不應(yīng)該是你監(jiān)聽到的按鍵的。
更:查了一下。這個(gè)按鍵是有廣播的。這樣就能夠后臺(tái)響應(yīng)了(不須要C/不須要root)。樣例我就不試了,見官方樣例。
當(dāng)中的重點(diǎn)是這個(gè)廣播...。
更:
本來不想再更新那個(gè)了,好吧,我還是更新了一下。關(guān)于后臺(tái)監(jiān)聽媒體相關(guān)按鍵的方法。沒有在界面上更新。通過查看信息打印。
上述內(nèi)容算「魚」,下邊把「漁」也提供了:
第一步先直接編譯執(zhí)行,然后發(fā)現(xiàn)確實(shí)不能收到廣播。然后推斷是系統(tǒng)版本號(hào)問題,有可能是并沒有更新為適合4.0以上的。
在>=4.0(.3)這里找到了問題所在。加入之成功。然后整合到上。詳細(xì)改了哪些內(nèi)容通過上的查看。
更:
關(guān)于測試程序的源代碼,是托管在上的。文中找到""鏈接,打開后例如以下圖下載:
/2/text/==/font///400/fill/==//70//" alt="\">
當(dāng)然簡單一點(diǎn),也能夠通過監(jiān)聽音量變化也實(shí)現(xiàn)曲線監(jiān)聽等等,只是這個(gè)不是我研究的重點(diǎn)。
另外一點(diǎn)是 對于單聲道耳機(jī)按鍵研究 眼下也僅僅能是挖的一個(gè)坑。什么時(shí)候埋臨時(shí)不好說。
先寫到這里 (語音通話時(shí)“按鍵”處理過程)
文字描寫敘述:已經(jīng)找到處理過程。和猜測的一致。解析出特定的“按鍵”后直接進(jìn)行處理。沒有向外界通知什么。依據(jù)高亮的英文也能猜測出含意。第一張圖是語音通話時(shí)的各種“按鍵”事件。第二張圖是對“撥號(hào)/重?fù)堋辨I的處理。高亮出是重?fù)軙r(shí)獲取通話記錄中最后一個(gè)號(hào)碼。
假設(shè)能夠訪問那么你也能夠直接在線查看我截圖的這兩段代碼片段。.java(另:我是基于4.2.2分析的),這是簡單的分析過程,對于怎樣在APP中監(jiān)聽,下回再說。
/2/text/==/font///400/fill/==//70//" alt="\">
相關(guān)閱讀:手機(jī)音樂播放器源代碼 Android怎樣監(jiān)聽藍(lán)牙耳機(jī)的按鍵事件
2、繁體字轉(zhuǎn)換模塊,此處可以把你輸入的...