歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 4.0中按鍵的處理流程

Android 4.0中按鍵的處理流程

日期:2017/3/1 10:01:42   编辑:Linux編程

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

無論是虛擬按鍵還是物理按鍵都是要經過驅動層注冊為輸入設備,然後上報到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開發人員提供接口。

普通按鍵盤流程

HAL層

./hardware/libhardware_legacy/power/power.c

set_screen_state(int on)

hal層按鍵休眠和喚醒

JNI層

frameworks/base/core/jni/android_os_Power.cpp

static int
setScreenState(JNIEnv *env, jobject clazz, jboolean on)
{
return set_screen_state(on);
}

JAVA層

frameworks/base/core/java/android/os/Power.java

public static native int setScreenState(boolean on);

frameworks/base/services/java/com/android/server/PowerManagerService.java

為APP層提供以下接口

public void goToSleep(long time)==》public void goToSleepWithReason(long time, int reason)==》private void goToSleepLocked(long time, int reason)==》private void setPowerState(int state)==》

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved