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

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

android如何通过代码重启应用(根据按Power键的次数来实现自定义的功能)

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;

  • 西安出发自驾九寨沟经验(自驾游4西安)
  • 2024-07-01自驾游4西安️今天的行程:九寨沟+九寨千古情1⃣️时间:又是早起的一天[捂脸][捂脸]早上六点半左右起床,七点吃早饭,然后打车去九寨沟,打车大概不到五分钟景区七点半开门,我们到时还不到七点半,但是景区入口处已经排。
  • 人类婴儿为什么进化出哭声很大(人类婴儿生存能力很差)
  • 2024-07-01人类婴儿生存能力很差相比于其他动物宝宝,人类宝宝真的没那么聪明我们知道,小羊、小牛刚出生不久就能够站起来,并跟随母亲行走;小猫、小狗的幼崽虽然刚出生不具备生存能力,但用不了几个月,它们就具备独立的技能,并且还能在下一年发。
  • 日中花怎么养殖开花多(日中花如何养殖开花多)
  • 2024-07-01日中花如何养殖开花多土壤养殖日中花的时候土壤要用松软,透气能力好且排水能力强的盆栽养护的可在园土里面掺杂适量的粗砂,腐叶土进行混合调制,有条件的再加入适量的有机肥,提高土壤肥力,这样可促使植株更好更旺盛的生长注意自己调制。
  • 触漫怎么获得所有衣服(步骤是什么)
  • 2024-07-01步骤是什么点击触漫app界面正中间的“创作”进入“创作”界面就能看到有许多服装套装可以选择,大部分的套装都要通过金币来购买,不过也有一部分套装是可以免费购买的只要标注0金币就可以免费领取了!需要金币购买的套装则。
  • 初二物理上册公式知识点总结(初三物理期末复习必备公式大全)
  • 2024-07-01初三物理期末复习必备公式大全初中物理属于物理学的基础阶段,主要考查同学们对物理公式、概念、定义的熟练掌握和运用灵活运用的前提就是牢记这些知识点,但由于初中物理公式定理繁杂,大部分同学又不愿意花时间去归纳整理,导致记忆模糊,考试容。
  • 食堂怎么蒸饭最好吃(说说杭州外婆家)
  • 2024-07-01说说杭州外婆家平时与同事聚会,实惠又好吃的地方自然是“外婆家”、“新白鹿”这些连锁经营的饭店,离工作不远的地方就有“外婆家”餐厅,吃腻了外卖的同事们,中午会约着一起去“外婆家”吃午饭,第一次的时候,看着人多我们就点。
  • 手机壳的暴利(手机壳攻入年轻人潮流腹地)
  • 2024-07-01手机壳攻入年轻人潮流腹地文丨木狸,出品丨零售氪星球(ID:LS-KXQ)“手机早晚不离手,手机壳跟穿搭的配饰一样重要,彰显的是个性,提亮的是心情,绝不能拉垮”去年刚毕业的手机壳“大户”非非,在玩壳工厂一台DIY手机壳智造机上。
  • 论语学而篇第15篇感悟(论语学习笔记308)
  • 2024-07-01论语学习笔记308【原文】14.35子曰:“莫我知也夫!”子贡曰:“何为其莫知子也?”子曰:“不怨天,不尤人下学而上达,知我者其天乎!”【译文】孔子说:“没有人了解我啊!”子贡说:“为什么说没有人了解您呢?”孔子说:“。
  • 孢子甘蓝怎么吃(孢子甘蓝吃法介绍)
  • 2024-07-01孢子甘蓝吃法介绍材料:孢子甘蓝500克、大蒜3-4瓣、蚝油适量做法:孢子甘蓝洗净切开大蒜去皮切成蒜末锅内放适量油,烧至六成热后放入蒜末爆香加入甘蓝翻炒至表面断生锅内加入将将没过甘蓝的热水根据个人口味加入适量蚝油翻炒均。
  • 重庆春游看花时间 重庆的春天究竟有多美
  • 2024-07-01重庆春游看花时间 重庆的春天究竟有多美二月下旬,阳光明媚,重庆主城各地的美人梅率先给人们带来了春的气息图为佛图关公园美人梅花开成“海”,穿越其中的轨道交通2号线列车,被人们美誉为“开进春天的列车”重庆主城的美人梅肆意地绽放着,那么热情,那。
  • 车险综合改革取得的成效(车险综合改革启幕)
  • 2024-07-01车险综合改革启幕占据财险市场半壁江山且与车主密切相关的车险,将迎来一轮新的重大调整7月9日晚间,银保监会对外发布《关于实施车险综合改革的指导意见(征求意见稿)》(以下简称《征求意见稿》),此轮改革将对车主及财险行业产。