1. 程式人生 > >一個手咪按鍵,檢測擡起和按下的思考

一個手咪按鍵,檢測擡起和按下的思考

最近有一個功能,檢測一個手持對講裝置按下和擡起事件。

直接在Activity的onKeyDown和onKeyUp中處理,得到下面的事件

按下事件觸發:

{ action=ACTION_DOWN , scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=261976791, downTime=261976791 }->>onKeyDown

{ action=ACTION_UP , scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=261976967, downTime=261976791 }->>onKeyUp

擡起事件觸發:
{ action=ACTION_DOWN , scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=261998135, downTime=261998135 }->>onKeyDown

{ action=ACTION_UP , scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=261998313, downTime=261998135 }->>onKeyUp

{ action=ACTION_DOWN , scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=261998745, downTime=261998745 }->>onKeyDown

{ action=ACTION_UP , scanCode=164, metaState=0, flags=0x8, repeatCount=0, eventTime=261998918, downTime=261998745 }->>onKeyUp


也就是說,按下時候直接觸發兩個事件,down和up,擡起時候就更過分了,觸發了兩次down和up。

考慮到事件都是成對出現,只需要監聽一個事件就可以,也就是說一次ACTION_DOWN事件代表按下,連續兩次ACTION_DOWN事件代表擡起。


考慮到這裡就要考慮事件順序了,需要明確事件是按下->擡起->按下->擡起進行觸發的,不能直接擡起->擡起觸發。

考慮到第二次會觸發兩次,也就是說,擡起觸發第一次的時候,可以認定此時擡起事件啟動,第二次觸發擡起事件的時候,擡起事件完成。若規定時間內內沒有連續觸發兩次,則認定擡起按下事件混亂,重置。

程式碼如下: