android如何通过代码重启应用(根据按Power键的次数来实现自定义的功能)
android如何通过代码重启应用(根据按Power键的次数来实现自定义的功能)
2024-11-22 06:55:58  作者:呵我啊  网址:https://m.xinb2b.cn/know/jvq290657.html

通过查看 PhoneWindowManager 中 power 相关流程,发现Android 原生code中已经添加了对Power键连按的接口,目前可以定义按一次、按两次及按三次时对应的响应操作,今天小编就来说说关于android如何通过代码重启应用?下面更多详细答案一起来看看吧!


android如何通过代码重启应用

通过查看 PhoneWindowManager 中 power 相关流程,发现Android 原生code中已经添加了对Power键连按的接口,目前可以定义按一次、按两次及按三次时对应的响应操作。

Android中对Power键连按次数的定义如下:frameworks\base\core\res\res\values\config.xml

短按一次power键系统定义:

<!-- Control the behavior when the user short presses the power button. 0 - Nothing 1 - Go to sleep (doze) 2 - Really go to sleep (don't doze) 3 - Really go to sleep and go home (don't doze) 4 - Go to home 5 - Dismiss IME if shown. Otherwise go to home --> <integer name="config_shortPressOnPowerBehavior">1</integer>

连续短按两次power键系统定义:

<!-- Control the behavior when the user double presses the power button. 0 - Nothing 1 - Toggle theater mode setting 2 - Brightness boost --> <integer name="config_doublePressOnPowerBehavior">0</integer>

连续短按三次power键系统定义:

<!-- Control the behavior when the user triple presses the power button. 0 - Nothing 1 - Toggle theater mode setting 2 - Brightness boost --> <integer name="config_triplePressOnPowerBehavior">0</integer>

可以看到短按两次和短按三次都是定义的 0,对应为 nothing,即不做任何操作。

power键在config中的定义,最终是在PhoneWindowManager.java 的 powerPress()方法中判断和实现。frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

private void powerPress(long eventTime, boolean interactive, int count) { if (mScreenOnEarly && !mScreenOnFully) { Slog.i(TAG, "Suppressed redundant power key press while " "already in the process of turning the screen on."); return; } if (count == 2) {//短按两次power键的实现 powerMultiPressAction(eventTime, interactive, mDoublePressOnPowerBehavior); } else if (count == 3) {{//短按三次power键的实现 powerMultiPressAction(eventTime, interactive, mTriplePressOnPowerBehavior); } else if (interactive && !mBeganFromNonInteractive) { switch (mShortPressOnPowerBehavior) { case SHORT_PRESS_POWER_NOTHING:break; case SHORT_PRESS_POWER_GO_TO_SLEEP:goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);break; case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP:goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);break; case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME:goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);launchHomeFromHotKey();break; case SHORT_PRESS_POWER_GO_HOME:shortPressPowerGoHome();break; case SHORT_PRESS_POWER_CLOSE_IME_OR_GO_HOME: {if (mDismissImeOnBackKeyPressed) { if (mInputMethodManagerInternal == null) { mInputMethodManagerInternal = LocalServices.getService(InputMethodManagerInternal.class); } if (mInputMethodManagerInternal != null) { mInputMethodManagerInternal.hideCurrentInputMethod(); }} else { shortPressPowerGoHome();}break; } } } }

由code中发现,短按两次,三次都是在powerMultiPressAction()中实现

private void powerMultiPressAction(long eventTime, boolean interactive, int behavior) { switch (behavior) { case MULTI_PRESS_POWER_NOTHING: break; case MULTI_PRESS_POWER_THEATER_MODE: if (!isUserSetupComplete()) {Slog.i(TAG, "Ignoring toggling theater mode - device not setup.");break; } if (isTheaterModeEnabled()) {Slog.i(TAG, "Toggling theater mode off.");Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);if (!interactive) { wakeUpFromPowerKey(eventTime);} } else {Slog.i(TAG, "Toggling theater mode on.");Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.THEATER_MODE_ON, 1);if (mGoToSleepOnButtonPressTheaterMode && interactive) { goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);} } break; case MULTI_PRESS_POWER_BRIGHTNESS_BOOST: Slog.i(TAG, "Starting brightness boost."); if (!interactive) {wakeUpFromPowerKey(eventTime); } mPowerManager.boostScreenBrightness(eventTime); break; } }

正好就是config_doublePressOnPowerBehavior和config_triplePressOnPowerBehavior对应的三种状态,因此,可以以此为入口,通过自定义第四种状态,来实现自定义功能,比如:紧急呼叫功能。

附上同时所实现的连续短按三次power键实现紧急呼叫功能:

1) 自定义状态值Config.xml<integer name="config_triplePressOnPowerBehavior">3</integer>PhoneWindowManager.javastatic final int MULTI_PRESS_POWER_EMERGENCY_CALL = 3;2) 实现对应功能PhoneWindowManager.java 的 powerMultiPressAction()方法添加 case:case MULTI_PRESS_POWER_EMERGENCY_CALL:Intent callIntent = new Intent(Intent.ACTION_CALL_EMERGENCY);callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);callIntent.setData(Uri.parse("tel:112"));mContext.startActivity(callIntent);break;

  • 两个一样的车标是什么车(捂住车标你能区分出这10款车吗)
  • 2024-11-22捂住车标你能区分出这10款车吗现如今车市中,不少车企都采用了双车战略,姊妹车型通过细微的差异错位竞争,来抢占更多的市场份额但是很多消费者看见它们表示自己“脸盲”了,一个品牌旗下有两款车型酷似比较常见,但是也有一些“野生兄弟”,虽然。
  • 国画白头翁鸟的画法步骤 白头翁画法步骤
  • 2024-11-22国画白头翁鸟的画法步骤 白头翁画法步骤燕子画法燕子身体小,背部羽毛黑色,有光泽,腹部白色,多在屋檐下筑巢范例一画法步骤步骤一:用中墨勾燕子的结构,重墨勾翅膀、尾羽、嘴之后以劈笔丝毛法画黑色羽毛,翅膀、尾羽的翎片用重墨分染用焦墨点睛步骤二:。
  • 第五人格渔女教学 第五人格渔女进阶教学
  • 2024-11-22第五人格渔女教学 第五人格渔女进阶教学本文首发【第五许愿码】公众号,未经授权禁止转发至其他平台《第五人格》是由网易开发的非对称性对抗竞技类游戏、游戏玩法多变内容丰富;吸引了很多新手玩家加入;今天由山海来为大家解析《第五人格》监管者阵营渔女。
  • 免检车申领检验标志可以不申领吗(好消息在浙里办)
  • 2024-11-22好消息在浙里办近日,公安部、市场监管总局、生态环境局、交通运输部联合推出深化车检改革优化车检服务新举措,进一步优化调整非营运小微型载客汽车(9座含9座以下,面包车除外)、摩托车检验周期自2022年10月1日后,非营。
  • 七旬老人被儿子打死(山东68岁老人砸死自己孙子)
  • 2024-11-22山东68岁老人砸死自己孙子2011年9月2日,山东省济宁市泗水县发生了一起骇人听闻的杀人案件,68岁的村民宋广寅竟然在自己的家中亲手杀死了自己的亲孙子——年仅26岁的宋宪旺而更令人们感到意外的是,当办案民警来到泗水县针对案情走。
  • 别克mpv新款2023款(不到8万就可以搞定)
  • 2024-11-22不到8万就可以搞定本期话题我们来聊聊海马V70外观:外观整体比之前的普力马年轻不少,前脸饱满,运动风格的包围加上LED大灯显得非常时尚内饰:内饰大部分用硬塑料就不说了,很多按键手感确实一般般,松松垮垮的空间:第二排座椅。
  • 正宗重庆酸辣粉做法(正宗重庆酸辣粉做法是什么)
  • 2024-11-22正宗重庆酸辣粉做法是什么木耳10克用适足量温水彻底浸泡后清洗干净,锅中倒入清水大火加热至沸腾,放入木耳焯3.5分钟,捞出过冷水后沥干用烫过木耳的开水把红薯粉丝煮至九成熟,捞出沥水,放入香油挑拌松弛,以免粘连在一起将木耳撕成小。
  • 自己家装材料怎么选(硬装材料如何省钱)
  • 2024-11-22硬装材料如何省钱本文作者:befreejay8、刷油漆这里就是油漆工的阶段了,主要的工作就是刮腻子,将墙面和吊顶抹平,刷油漆需要购买的主要材料就是腻子粉和乳胶漆,还有一些小件,工具什么的,油漆工会给你一个清单,你就照。
  • 安乐死在什么国家合法(安乐死又在一个国家合法了)
  • 2024-11-22安乐死又在一个国家合法了澎湃新闻记者邹熳云经过一年多的讨论,当地时间3月18日,西班牙众议院终于通过了安乐死法案,成为欧洲第四个合法安乐死的国家该法案将在今年6月开始生效安乐死分为很多种,并非都饱受争议据BBC报道,西班牙的。
  • 钨价从什么时候开始涨(限产推动钨价上涨)
  • 2024-11-22限产推动钨价上涨据上海证券报21日报道,昨日钨市场价格继续调涨,钨精矿每吨上涨1500元、APT调涨2500元,平均涨幅逾2%其中钨精矿自去年11月低点以来,累计涨幅达40%相关厂家表示,目前钨精矿价格刚回到大型矿山。