android如何通过代码重启应用(根据按Power键的次数来实现自定义的功能)
android如何通过代码重启应用(根据按Power键的次数来实现自定义的功能)
2024-05-29 05:01:55  作者:呵我啊  网址:https://m.xinb2b.cn/know/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-05-29木府土司历史是什么木得(1304~1389)洪武十五年~二十三年任丽江土知府(1382~1390)1382年朱元璋赐木姓,1383年任丽江土知府木初(1345~1425)洪武二十四年~永乐十七年任丽江土知府(1391~。
  • 山药豆怎么做好吃(山药豆的做法)
  • 2024-05-29山药豆的做法食材:山药豆适量,白糖适量,清水适量,玉米油适量买适量多的山药豆,用清水泡洗净备用上蒸锅,加水开火,辅上纱布倒入洗净的山药豆进行蒸,水开后蒸8-10分钟就好了把蒸好的山药豆去出来晾凉了备用锅中放适量的。
  • 寻找向前第几集离婚(寻找向前出自什么剧)
  • 2024-05-29寻找向前出自什么剧在第六集中,向前找到了寻找,并向寻找道歉,希望她能回家,可寻找却指责向前根本不知道什么是真正的生活,在他的眼中只有钱,向前最终决定和寻找离婚,把所有财产都留给寻找,让她和孩子衣食无忧寻找却什么都不要,。
  • 世界上最吓人的三种毒蛇(号称世界上最贵的毒蛇)
  • 2024-05-29号称世界上最贵的毒蛇#多样世界生生不息#上世纪90年代末,有人不远千里来到人烟稀少的山区找到一位养蛇人,用一箱现金换一条蛇,养蛇人摇摇头表示拒绝,究竟是什么蛇值得一掷千金,又是什么人抵住了巨大的诱惑?九指蛇医和莽山烙铁头。
  • 如何评价剑网3缘起(你还记得那首由韩红唱)
  • 2024-05-29你还记得那首由韩红唱相信对于很多网游玩家,不,是每个心目中都有一场华美瑰丽的武侠梦的人来说,《剑侠情缘》这个IP,都是心中永远不可磨灭的经典特别是现在西山居旗下,剑侠系列扛把子端游剑网三,可以说是很多人心目中武侠端游的代。
  • 暗杀游戏剧情讲解 暗杀游戏今日上映
  • 2024-05-29暗杀游戏剧情讲解 暗杀游戏今日上映3D科幻悬疑大片《暗杀游戏》于今日正式登录全国院线,影片展现了极具戏剧张力和人性冲突的故事情节,加上多轮惊险梦境的设计,使得整部电影的节奏非常紧凑,小高潮不断同时由于影片围绕生存真人秀展开,挑战者间的。
  • 樱桃木和胡桃木哪个好 樱桃木的优缺点
  • 2024-05-29樱桃木和胡桃木哪个好 樱桃木的优缺点​​樱桃木的优点1、樱桃木的颜色一般是由深红色向淡红棕色过渡,它的木材纹理比较通直,木质不硬,相对来说对于加工器材的损耗比较小另外,樱桃木干燥之后缩水比较厉害樱桃木是因为它有着细腻的木质,高雅的装饰效。
  • 唐诗三百首翻译及赏析全集(唐诗三百首311卷61120卷)
  • 2024-05-29唐诗三百首311卷61120卷《唐诗三百首》共选入唐代诗人77位,计310首诗,其中五言古诗33首,乐府46首,七言古诗28首,七言律诗50首,五言绝句29首,七言绝句51首,诸诗配有注释和评点五言古诗简称五古,是唐代诗坛较为流行。
  • 女孩看的电影有哪些(那些女性解放电影你有看过吗)
  • 2024-05-29那些女性解放电影你有看过吗《男孩别哭》HilarySwank的成名作一位女孩面对这个残忍的世界她的生与痛,或者说,一位男孩面对这个残忍的世界的他的生与痛,不管旁人如何看待,如果是真心相爱的两个人,性别对他们来说,就仅仅是一个符。
  • 三个数字算爱情(生日数字算出你专情or超花心 6号狂爱肉体出轨)
  • 2024-05-29生日数字算出你专情or超花心 6号狂爱肉体出轨你是专情还是花心,用生日算算看就知道了(示意图/记者李佳蓉摄)网搜小组/综合报导明明已经有了女朋友,却「吃碗内看碗外」肖想其他女生吗?又或者是单身女子,同时的交友数量爆表,遇见「美好事物」就想花心吗?。
  • 路由器怎么连不上网?(也许是这些问题)
  • 2024-05-29也许是这些问题路由器连接问题,普通的无线路由器一般有5个网线接口,1个WAN口,4个LAN口不少用户在连接路由器的时候,把这些接口连接错了,导致路由器连不上网正确连接方式:把猫/光猫中接出来来的网线,插在路由器的W。