位置: 编程技术 - 正文

Android 长按电源键和短按电源键的详细处理流程(安卓如何取消长按电源键关机)

编辑:rootadmin
1 Android Android4.x在Framework的PhoneWindowManager对Power(KeyEvent.KEYCODE_POWER)和Home(KeyEvent.KEYCODE_HOME)键做了处理,不会把这些键传送上层应用程序。如需要把这些键发送给Activity和Service,需要在PhoneWindowManager处理这些键时“发送一个广播出去,然后在应用程序接收到广播后做处理”。

推荐整理分享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(){

...

Android 长按电源键和短按电源键的详细处理流程(安卓如何取消长按电源键关机)

}

};

它包括了定义这个类(只不过这个类没有名字)和实例化这个类的对象。

当超时时,其执行流程如下图所示:

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 转载请保留说明!

上一篇:调用系统相机导致照片旋转问题的修复(相机调取失败)

下一篇:android 动画资源(android动画种类)

  • 可以抵扣的进项税额是什么意思
  • 小规模销售产品会计分录
  • 快递费运费物流费一样吗
  • 税务登记网上怎么做
  • 三证合一后个体户注销流程
  • 银行的记账凭证怎么做
  • 成品油认证后要开票怎么做
  • 外地预缴的增值税要在本地计算附加税吗?
  • 发生采购业务无合同需要缴印花税吗
  • 冲回存货跌价准备计提递延所得税
  • 专项资金可以存定期吗
  • 如何理解合并报表
  • 补上年所得税加滞纳金入哪个科目?
  • 免抵调增值税是否缴纳附加税
  • 个人独资企业个税税率表2023
  • 代扣代缴的增值税可以作为进项税抵扣吗
  • 开发转产品好转吗
  • 资金清算款项
  • 装修待摊费用当月摊销吗
  • 自建房房产税计税依据及计算方式
  • 资金池利息收入计入投资收益吗
  • 出口企业取得失业保险
  • 服务费发票可以部分红冲吗
  • 腾讯手游助手遇到未知错误
  • 个体工商户需要办公户吗
  • php可变参数
  • schedulerv2.exe - schedulerv2是什么进程 有什么用
  • owmngr.exe - owmngr是什么进程 作用是什么
  • 缅因州达马里斯科塔地区的佩马基德灯塔 (© Tom Whitney/Adobe Stock)
  • php零基础入门教程
  • 怎么确定
  • 事业单位财政专项资金可以用于职工社保
  • php parse_str() 函数的定义和用法
  • 中兴网管操作手册
  • es6解构赋值对象
  • 增值税申报表期初未缴税额
  • 纳税人在电子税务局收到优惠政策
  • 房产自用改为出租如何申报房产税
  • 企业贷款利息可以开发票吗
  • 代理付银行手续费合法吗
  • python中myqr的用法
  • mysql客户端怎么使用
  • MySQL中Distinct和Group By语句的基本使用教程
  • mongodb 权限设置
  • 织梦标签理解
  • 金融债券利息收入免企业所得税吗
  • 购进已经折旧提完的二手车
  • 补办理营业执照需要什么材料
  • 存货增加使经营活动现金净流量减少该怎么办
  • 交易性金融资产的账务处理
  • 出口报关金额怎么算
  • 客户付了订金后能退吗
  • 营业账簿印花税怎么申报
  • 主营业务收入一定要结转成本吗
  • 总资产报酬率的利息支出是财务费用吗
  • 冲减坏账准备的金额怎么计算
  • 汇算清缴资产总额全年季度平均值怎么算
  • 总账的设置和登记实训报告
  • jdbc连接sqlserver数据库查询数据画饼图
  • 如何配置samba配置文件
  • windows资源管理器停止工作怎么办
  • macbookpro中的文本编辑
  • graphics.dll
  • win7系统IE浏览器打开跳转到360浏览器,怎么阻止
  • win10周年更新版是什么意思
  • wysafe.exe是什么
  • WIN10系统英文怎么改中文?
  • Extjs Ext.MessageBox.confirm 确认对话框详解
  • javascript解决了什么问题
  • 文件夹如何取名字
  • js的继承方式
  • vue css
  • linux中使用最多的命令
  • python str()怎么用
  • Python使用dis模块把Python反编译为字节码的用法详解
  • python自带的gui
  • 全资子公司和全资子企业的区别
  • 香皂需要换着用吗
  • 广东省电子税务局app下载手机版
  • 公司完税证明去哪里开具
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设