加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Android 4.0中按键的处理步骤

发布时间:2021-11-21 20:54:24 所属栏目:教程 来源:互联网
导读:首先,简要的介绍一下按键的处理流程。先简单的分为两大类:一类是虚拟按键。另一类是物理按键。 无论是虚拟按键还是物理按键都是要经过驱动层注册为输入设备,然后上报到kernel/drivers/input/input.c中。这里有相关函数的定义。然后通过、sys上报到framewo

首先,简要的介绍一下按键的处理流程。先简单的分为两大类:一类是虚拟按键。另一类是物理按键。
 
无论是虚拟按键还是物理按键都是要经过驱动层注册为输入设备,然后上报到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)==》

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读