android如何通过代码重启应用(根据按Power键的次数来实现自定义的功能)
android如何通过代码重启应用(根据按Power键的次数来实现自定义的功能)
2024-06-01 11:08:54  作者:呵我啊  网址:https://m.xinb2b.cn/tech/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;

  • 新时代继续弘扬长征精神(用青年方式打开传承长征精神的图谱)
  • 2024-06-02用青年方式打开传承长征精神的图谱今天,是中国工农红军长征胜利85周年纪念日如今,再回看当年那段远征,即使相隔85年的漫长岁月,依旧让人惊心动魄两年时间,两万五千里的爬山涉水、英勇战斗,写下了一段传奇,留下了一个神话其实,哪有什么传奇。
  • dpf颗粒捕捉器堵塞怎么办(什么是GPF颗粒捕捉器再生)
  • 2024-06-02什么是GPF颗粒捕捉器再生在严格的排放法规下,全球汽车市场上的品牌和车主都在讨论GPF颗粒捕捉器,这是一种安装在排气管内部,用于过滤碳粒的装置,就像发动机口罩,可以减少污染对于超跑来说,GPF会降低车辆的声浪音调;对于普通家用。
  • 好听的英文歌you(经典英文歌nomore)
  • 2024-06-02经典英文歌nomoreNoMore”ILoveYou’s”-annielennox我不再爱你了——安妮·蓝妮克丝Iusedtobelunaticfromthegraciousdays在过去那些柔情蜜意的日子里我几近疯狂Iu。
  • 17点40分正常吗(今天18时02分正式进入)
  • 2024-06-02今天18时02分正式进入天时人事日相催冬至阳生春又来今日18时02分我们迎来冬至节气进入冬至后天气进入一年中最寒冷的阶段被称为“数九”下面是今年”数九“天时间表↓↓↓一九时间:2020年12月21日-2020年12月29日二。
  • 韩国国宴菜(享受国宴级待遇)
  • 2024-06-02享受国宴级待遇去韩国之前,先点蓝字关注我们来到韩国不吃顿正宗的韩餐肯定不会过瘾哒!今天小编给大家介绍一下吃韩餐绝对正宗的地方,简直是国宴待遇呢!这里就是韩国之家亮点亮点1感受韩国传统饮食、传统演出、传统婚礼、传统文。
  • 北冰洋漂浮的冰山(北冰洋在沸腾)
  • 2024-06-02北冰洋在沸腾北半球的夏天一到,北极圈内的北冰洋就开始大规模解冻按照气候学家的估计,最早在本世纪中叶,北极圈附近的海水就将全部解冻,这将成为对人类影响深远的重大事件冰封亿万年的北冰洋融化后,又会给人类带来哪些“惊喜。
  • 云顶之弈怎样确定玩的阵容(选什么阵容最强)
  • 2024-06-02选什么阵容最强无需否认,云顶之弈其实一直都有最强阵容存在的,比如虚空斗士大虫子,虚空斗刺、之前的法师剑魔,拉面熊但是强的阵容玩的人也会多,只因为很多人玩这游戏都想着做最强的,很多人在一个卡牌池里抢同样类型的牌,这样。
  • 120hz刷新率要一直打开吗(用过120Hz高刷新率后就回不去了)
  • 2024-06-02用过120Hz高刷新率后就回不去了最近国产手机的发布会一场接着一场,从千元机到旗舰机看得人眼花缭乱,配置是越来越高,很多中端安卓手机都用上了120Hz的高刷屏,很多网友表示真香1000多元的安卓手机已经可以买到高刷120Hz的,而浩南。
  • 岳云鹏杜海涛相声(被誉教师界岳云鹏)
  • 2024-06-02被誉教师界岳云鹏1他叫李佟,是个小学老师,但同学们都喜欢喊他“佟哥”;他教的科目是语文,但同学们也跟着他唱京剧,学相声,有不少同学们称他是教师界的“岳云鹏”他讲课时常不按常理出牌,但同学却非常喜欢他出其不意的“小惊喜。
  • 英雄传说6空之轨迹fc完美攻略(空之轨迹fc详细攻略)
  • 2024-06-02空之轨迹fc详细攻略第零话星杯骑士游戏一开始在宴会厅中,几句话过后就能控制假面神父,之后通过走廊走到二楼主人房间(一楼上方的三个房间有药,一旦到二楼发展剧情后就不能拣)发展剧情.进到房间后按(1:地毯左上角2:左下角的花。
  • 如何从面相看出人的命运(从面相看看哪些人的命苦)
  • 2024-06-02从面相看看哪些人的命苦有人说,女人的悲凉,是天底下一万个苦命人的其中一种她们积累了一身的戾气,随意施暴于别人,却把自己施暴成了“人不像人”的疯子现实是有很多人生来就是苦命,这些人可以通过后天的努力来改善,有的人通过后天再大。