導航:首頁 > 操作系統 > android監聽音量鍵

android監聽音量鍵

發布時間:2022-08-27 02:50:36

android service的監聽前台點擊事件怎麼寫

  1. 第一種辦法是廣播,一般來說系統對於音量鍵和Home鍵會發送廣播,我們可以再廣播中監聽這些按鍵信息。具體的IntentFilter怎麼寫,大家可以網路一下。

  2. 第二種辦法仍然是廣播,不過這就需要修改SDK了,在WindManagerService裡面,分發按鍵事件的時候的發送特殊的廣播的,這個改動可能比較麻煩。

  3. 第三種辦法是直接讀取輸入設備文件,一般該文件位於/dev/input/文件夾下面,不過裡面一般有多個文件,具體哪個文件描述的哪一個輸入設備,需要大家進行嘗試。設備的文件的讀取需要使用c或者c++來完成。具體的實現代碼可以參考:https://github.com/radhoo/android-event-injector。這種辦法需要有root許可權才行,而且讀取的鍵值是沒有做過轉換的,也就是說和我們平常使用的鍵值是不一樣的。其實大家可以在adb shell中,通過getevent查看。

  4. 第四種辦法是使用系統的無障礙服務,也就是AccessibilityService。我最終採用的方式就是這個,因為這個不僅可以監聽按鍵,還能攔截。關於AccessibilityService的實現,網上講的比較多了。我這里只提幾個需要注意的點:

㈡ android開發 可不可以監聽藍牙耳機調音量的兩個按鍵

可以的,詳細你可以參考:http://blog.csdn.net/kangear/article/details/40430673

㈢ Android同時監聽電源鍵和音量上鍵

下面兩種都可以獲取到音量鍵

測試的時候,發現KeyEvent.KEYCODE_VOLUME_UP 一直按住的時候

三星的一款平板計數到200,就不在觸發該事件;

所以改為 KeyEvent.ACTION_DOWN 時啟動一個方法用來計數, KeyEvent.ACTION_UP的停止技數;

㈣ 「監聽音量」是什麼意思啊

監聽就是:所有的音源進入調音台以後經過混合、處理後准備輸出的信號,我們通過調音台的監聽去聽聲音是音質和效果等怎麼樣,可能用,以便及時調整。

㈤ android怎麼實現後台對按鍵事件的監控

遙控器按鍵事件這個不是在Android源碼的bootable下面ircon.c配置的么。比如:
{ .scancode = 0x0b, .mask = 0xaa0087ee,
.keycode = KEY_UP, .spec = IRCON_KEYCODE_NORMAL | IRCON_KEYCODE_LONGPRESS | IRCON_KEYCODE_MOUSEMD },
遙控器按鍵編號是「 0x0b」,給他的響應是「KEY_UP」,就是方向鍵的下,這個是在源碼里邊配置的。你必須要有遙控器的書名數,知道遙控器每個按鍵的編號,然後對應給他相應的響應才可以。
但是你要操控手機,你的手機必須要能接受遙控器信號,這個也是要硬體支持的,一般的手機貌似都沒有這個。
這個遙控的響應操作是驅動層做的,和應用層沒什麼關系,主要是驅動和硬體的支持。

㈥ 如何在android 中service後台監聽按鍵,比如監聽音量鍵

為了實現鍵盤的監控,從新開發一個輸入法是不現實的,一般的操作就是在系統的輸入法機制中添加介面回調。我們知道,再應用程序中拿到按鍵的回調一般是監聽onKeyDown的介面,如下所示:publicbooleanonKeyDown(intkeyCode,KeyEventevent)開發者就可以根據回調方法中的參數,keyCode與KeyEvent來判斷具體事件。但是,由於事件的回調機制在其的沙箱中運行,在其他應用中是無法拿到當前應用事件回調的。那麼我們就從上到下,具體的看看事件的傳遞機制。如下圖所示,用戶點擊後,軟鍵盤或物理按鍵的輸入驅動就會產生一個中斷,且向/dev/input/event*中寫入一個相應的信號量。Android操作系統則會循環的讀取其中的事件,再分發給WindowManagerServer。由WindowManagerServer根據事件的來源分發到各個不同的ViewGroup與View中,從而產生不同的OnClick、OnKeyDown和OnTouch等事件。這個時候很自然的想到,黑客們希望做鍵盤監控,一定會向Linux底層增加自定義的事件。這里我們使用的是Linux中的getevent獲得/dev/input/eventX設備匯報的事件,這個命令還會輸出所有event設備的基本信息。包括觸屏、按鍵、耳機插入等等。其基本用法如下:Usage:getevent[-t][-n][-sswitchmask][-S][-v[mask]][-d][-p][-i][-l][-q][-ccount][-r][device]-t:showtimestamps-n:don'tprintnewlines-s:printswitchstatesforgivenbits-S:printallswitchstates-v:verbositymask(errs=1,dev=2,name=4,info=8,vers=16,pos.events=32,props=64)-d:showHIDdescriptor,ifavailable-p:showpossibleevents(errs,dev,name,pos.events)-i:-l:-q:quiet(clearverbositymask)-c:-r:printrateeventsarereceived鍵入getevent後,我們能夠看到設備中的一些列輸入硬體驅動信息,同樣下面會出現很多輸入指令信號,通常情況下,這些信號量都在刷屏,如下圖所示:這些信號量的表示我們無法直接看懂,輸入getevent–l加入Label我們能夠看到一些添加的標簽,如下所示:其實這些Lable已經在其input.h頭文件中定義好,其中type的定義如下:/**Eventtypes*/#defineEV_SYN0x00#defineEV_KEY0x01#defineEV_REL0x02#defineEV_ABS0x03#defineEV_MSC0x04#defineEV_SW0x05#defineEV_LED0x11#defineEV_SND0x12#defineEV_REP0x14#defineEV_FF0x15#defineEV_PWR0x16#defineEV_FF_STATUS0x17#defineEV_MAX0x1f#defineEV_CNT(EV_MAX+1)一般來說,常用的是EV_KEY、EV_REL、EV_ABS、EV_SYN,分別對應鍵盤按鍵、相對坐標、絕對坐標、同步事件。EV_SYN則表示一組完整事件已經完成,需要處理,EV_SYN的code定義事件分發的類型。

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

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

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

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

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

00c8200 開始放音樂MEDIA_PLAYKEYCODE_MEDIA_PLAY

00c9201 停止放音樂MEDIA_PAUSEKEYCODE_MEDIA_PAUSE

00a3163 下一曲MEDIA_NEXTKEYCODE_MEDIA_NEXT

00a5165 上-曲MEDIA_PREVIOUSKEYCODE_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多媒體開發--資源文件播放》。效果圖:


問與答
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.如果沒有得到,那麼就使用adbshellgetevent來看Linux底層可以不可以得到鍵值。然後根據按鍵從Linux到Android來確定Android上層使用的鍵值碼到底是多少。(當然,如果你實在不知道如何監聽,把藍牙耳機寄給我,我給你確定也行。:))

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

4.Android後台監聽按鍵怎麼實現

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

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

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

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

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

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

閱讀全文

與android監聽音量鍵相關的資料

熱點內容
emerson伺服器怎麼短接啟動 瀏覽:559
工控編程人員工資 瀏覽:397
速成義大利語pdf 瀏覽:250
連續加減乘除法的演算法 瀏覽:652
用mfc編程實現dda演算法 瀏覽:41
linux命令打開應用 瀏覽:146
改造後的程序員 瀏覽:270
數控編程變數 瀏覽:785
江門哪裡有plc編程系統 瀏覽:378
安卓手機如何下載外服b站 瀏覽:700
pythonetree庫 瀏覽:759
數據插值演算法 瀏覽:723
澳大利亞加密貨幣逃稅 瀏覽:484
pdf文檔如何壓縮 瀏覽:329
java單例模式線程安全 瀏覽:646
特種pdf 瀏覽:160
加油什麼app劃算 瀏覽:715
開服要什麼樣的伺服器 瀏覽:33
pdf文件太大怎麼壓縮 瀏覽:29
UK開票顯示文件夾不存在 瀏覽:668