位置: 编程技术 - 正文
推荐整理分享Android 长按电源键和短按电源键的详细处理流程(安卓如何取消长按电源键关机),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:安卓长按设置,安卓手机长按电源键,安卓手机长按电源键,手机长按电源,安卓如何取消长按电源键关机,长按电源键在哪里设置,安卓如何取消长按电源键关机,安卓如何取消长按电源键关机,内容如对您有帮助,希望把文章链接给更多的朋友!
如果应用程序只需要获取获取待机、唤醒、关机、网络状态变化消息,则可监听以下广播消息:1) 待机:广播消息:android.intent.action.SCREEN_OFF (代码)2) 唤醒:广播消息:android.intent.action.SCREEN_ON (代码)3) 关机:广播消息:android.intent.action.ACTION_SHUTDOWN (XML或代码)4) 网络状态变化: 广播消息:android.net.conn.CONNECTIVITY_CHANGE (XML或代码) 然后调用下面的isNetworkAvailable获取当前网络状态。public static boolean isNetworkAvailable(Context context) { ConnectivityManager mgr = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] info = mgr.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } return false; }
2. 短按Power键处理流程短按Power键处理流程如下图所示:
3. 长按Power键处理流程长按Power键处理流程如下图所示:
3.1 Message超时处理流程
如果长按Power键(超过ms),则此消息(Message.callback为mPowerLongPress)将被执行。mPowerLongPress (PhoneWindowManager.java)定义如下:
[java] view plaincopyprivate final Runnable mPowerLongPress = new Runnable() { public void run() { // The context isn't read if (mLongPressOnPowerBehavior < 0) { mLongPressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_longPressOnPowerBehavior); } switch (mLongPressOnPowerBehavior) { case LONG_PRESS_POWER_NOTHING: break; case LONG_PRESS_POWER_GLOBAL_ACTIONS: mPowerKeyHandled = true; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); showGlobalActionsDialog(); break; case LONG_PRESS_POWER_SHUT_OFF: mPowerKeyHandled = true; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); ShutdownThread.shutdown(mContext, true); break; } } };它是一个匿名内部类,它是一个实现Runnable的类的对象引用,因此
new Runnable() {
public void run(){
...
}
};
它包括了定义这个类(只不过这个类没有名字)和实例化这个类的对象。
当超时时,其执行流程如下图所示:
3.2 reboot系统调用流程reboot系统调用流程如下图所示:
4. 如何处理短按和长按电源键
长按电源键:弹出关机确认对话框(KeyDown之后,如果 ms之内,没有收到KeyUp则弹出关机确认对话框)
短按电源键:执行待机(KeyUp时执行<wmActions=4>)或唤醒(KeyDown时执行<wmActions=2>)
对于长按电源键,在PhoneWindowManager.java的interceptKeyBeforeQueueing函数中进行处理,其相关代码如下 :
[java] view plaincopycase KeyEvent.KEYCODE_POWER: { result &= ~ACTION_PASS_TO_USER; if (down) { if (isScreenOn && !mPowerKeyTriggered && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { mPowerKeyTriggered = true; mPowerKeyTime = event.getDownTime(); interceptScreenshotChord(); } ... // Power Key down, set mPowerLongPress executing after ms interceptPowerKeyDown(!isScreenOn || hungUp || mVolumeDownKeyTriggered || mVolumeUpKeyTriggered); } else { mPowerKeyTriggered = false; cancelPendingScreenshotChordAction(); if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) { result = (result & ~ACTION_POKE_USER_ACTIVITY) | ACTION_GO_TO_SLEEP; } // Power key up, remove the mPowerLongPress, that is, if user release // power key during ms, mPowerLongPress will not be execute, then execute sleep mPendingPowerKeyUpCanceled = false; } break; } [java] view plaincopyprivate void interceptPowerKeyDown(boolean handled) { mPowerKeyHandled = handled; if (!handled) { mHandler.postDelayed(mPowerLongPress, ViewConfiguration.getGlobalActionKeyTimeout()/*ms*/); } } private boolean interceptPowerKeyUp(boolean canceled) { if (!mPowerKeyHandled) { mHandler.removeCallbacks(mPowerLongPress); return !canceled; } return false; }android 动画资源 android动画资源Anroid动画资源分为两种,属性动画(PropertyAnimation)和视图动画(ViewAnimation).视图动画又分为两种:过渡动画:一张图片进行一系列的
Android:Layout_weight的理解 最近老是纠结布局参数很难记,索性遇到一个就弄懂一个吧Layout_weight这个参数乎不太好理解,尤其当layout_width=wrap_content和layout_width=fill_parent时的区别,
[置顶] android简单定时器 直接用 代码:importandroid.os.Handler;importandroid.os.Message;/***Createdbyfanbinon/7/2.*简单定时器*/publicabstractclassTiming{//更新uipublicabstractvoidmassg();//定时多长时间privateinttim
标签: 安卓如何取消长按电源键关机
本文链接地址:https://www.jiuchutong.com/biancheng/380945.html 转载请保留说明!友情链接: 武汉网站建设