Android 4.0中按鍵的處理流程

來源:互聯網
上載者:User

按鍵在Android系統中,有著不同的代表意義。以前的全鍵盤的手機代碼沒有閱讀過,所以也不是很瞭解。本人介紹的是在觸控螢幕的手機上的按鍵訊息的處理流程。

在現在觸控螢幕成為主流的輸入裝置的情況下,很多廠商都在努力的做到取消物理按鍵的工作,但是目前就本人的學習情況來看,完全取消在目前看來還是不是那麼現實。

有如下幾點原因:

首先,本人說明的是目前原生的Android系統上。

其次,Android系統為了節省電量,在電源管理的過程中設定了休眠的方式。而休眠的時候觸控螢幕同樣進入休眠狀態。因此,不能夠接收到使用者的輸入訊息。

再次,目前的物理按鍵(主要指power,volume。home)是通過電源管理晶片進行控制的。觸控螢幕不是。

因此,如果沒有現在的物理按鍵的情況下,如果想把裝置從休眠的狀態下喚醒基本上來講是不可能的。

下面來正式的記錄下本人在學習的過程中記錄的點點滴滴。

首先,簡要的介紹一下按鍵的處理流程。先簡單的分為兩大類:一類是虛擬按鍵。另一類是物理按鍵。

無論是虛擬按鍵還是物理按鍵都是要經過驅動層註冊為輸入裝置,然後上報到kernel/drivers/input/input.c中。這裡有相關函數的定義。然後通過、sys上報到frameworks/services/input/EventHub.cpp中,在這裡會對裝置進行掃描並且判斷是哪種裝置,然後在InputReader.cpp中對未經處理資料進行讀取。在framewoks/services/input/InputDispatcher.cpp中實現資料的派發。在framework/base/core/jni/android_view_KeyEvent.cpp中實現通過JNI機制向上層的KeyEvent.java提供資料。並且在frameworks/base/core/java/android/view/KeyEvent.java中向上層的APP開發人員提供介面。

當然,虛擬鍵盤中有一個映射關係,鍵盤的按索引值也會上報給上面的應用程式層,而對於物理按鍵往往是在frameworks層就被截取並且加以處理了。

普通的按鍵事件在Android系統中的調用流程(本人不太會處理visio繪圖的儲存問題)大致如下:

是人家goole的圖 是比俺畫的好啊……

但是對於物理按鍵的處理流程,目前主要查閱的代碼的結果是在PhoneWindowManager.java中進行截獲並處理的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.