首页 > 编程知识 正文

单片机按键流程图,安卓打开虚拟按键

时间:2023-05-04 17:35:26 阅读:137742 作者:3470

按键的处理属于本书后面要分析的输入系统的范围。 在此,我们将检索与电源键相关的代码进行分析。 代码如下所示。

* com _ Android _ server _ input manager.CPP :3360 handleinterceptactions * *

~~~

voidnativeinputmanager :3360 handleinterceptactions (jintwmactions,nsecs_t when,

uint32_t policyFlags ) {

当按下并松开Power键时,wmActions被设置为WM_ACTION_GO_TO_SLEEP,表示需要休眠

wmactionswm _ action _ go _ to _ sleep (if ) {

//利用JNI调用PMS的goToSleep函数

Android _ server _ power manager service _ goto sleep (when;

}

//在常见输入事件中调用userActivity函数,启动手机

wmactionswm _ action _ poke _ user _ activity (if ) {

利用//JNI调用PMS的用户活动函数。 相关内容在前一节进行了分析

Android _ server _ power manager service _ user activity (

POWER_MANAGER_BUTTON_EVENT;

}

.//其他处理

}

~~~

从上面的代码注释中可以看出,按下并释放Power键时,[^write]将调用触发PMS的goToSleep函数。 让我们看看goToSleep函数的代码。

* power manager service.Java :3360 goto sleep * *

~~~

公共时间(long time ) )。

{

gotosleepwithreason(time,windowmanagerpolicy.off _ because _ of _ user );

}

publicvoidgotosleepwithreason (长时间,intreason ) )。

{

m context.enforcecallingorselfpermission (/检查调用进程是否具有DEVICE_POWER权限

Android.manifest.permission.device _ power,null;

同步(mlocks ) {

gotosleeplocked(time,reason ); 调用goToSleepLocked函数

}

}

~~~

* power manager service.Java :3360 gotosleeplocked * *

~~~

privatevoidgotosleeplocked (long time,intreason ) {

最大事件时间=时间(if ) {

mLastEventTime=time;

mWakeLockState=SCREEN_OFF;

int N=mLocks.size (;

intnumCleared=0;

布尔专业xlock=false;

for(intI=0; I

welockwl=mlocks.get(I;

is screen lock (wl.flags ) ) }

if () (wl.flagslock_mask )=

power manager.proximity _ screen _ off _ wake _ lock )

reason==windowmanagerpolicy.off _ because _ of _ prox _ sensor ) {

proxLock=true; 确定goToSleep的原因是否与接近传感器有关

} else{

mlocks.get(I ).activated=false; //禁止屏幕相关的WakeLock

numCleared;

}

}//isScreenLock判断结束

}//for周期结束

if (! proxLock

mproxignoredbecausescreenturnedoff=true;

}

mstillneedsleepnotification=true;

mUserState=SCREEN_OFF;

setpowerstate(screen_off,false,reason ); //关闭画面

cancelTimerLocked 从mHandler中取消mTimeoutTask任务

}

}

~~~

掌握了前面的基础知识后,感觉电源键的处理流程真的很简单,读者也有同感吗?

[^write]:必须在一定时间内完成按下或松开电源键的操作。 否则,系统会认为是关机操作。 详细内容输入卷系统章的分析。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。