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

  • 肉眼观察矿物(是什么决定了矿物的颜色)
  • 2024-11-22是什么决定了矿物的颜色颜色是矿物最明显、最直观的性质,观察颜色对于鉴定区分不同矿物是至关重要的颜色是人们的一种生理感觉当可见区波长范围(390~770nm)内的电磁波辐射刺激人们的视觉神经时,人们就会产生颜色的感觉矿物对可。
  • 黔东南旅游有什么特产(这大概是最全的攻略了)
  • 2024-11-22这大概是最全的攻略了黔东南是一片多民族聚居地,千百年来的时光仿佛将这里遗弃,古风古韵古歌保存完整,人与自然的和谐共生这里民族之间互相交融却又各自独立,形成了独特的文化千岛解读黔东南黔东南线是整个贵州最有名气,最具吸引力的。
  • 网上社保证明打印(手机也可以打印电子社保证明啦)
  • 2024-11-22手机也可以打印电子社保证明啦大家都办理电子社保卡了吗?小编也办理了电子社保卡方便可多了!办理购房、入户、子女入学出国出境等事项都需要社保证明继之前可以线上打印社保证明现在又出新功能啦!还没有电子社保卡?赶紧去申请绑定账号后即可手。
  • 巴基斯坦洪灾是怎么形成的(卫星图显示形成约100公里宽)
  • 2024-11-22卫星图显示形成约100公里宽【文/观察者网刘程辉】“世界末日”“前所未有”“季风就像打了兴奋剂”......对于巴基斯坦本轮造成逾千人死亡的洪涝灾害,外媒和当地官员竭力用各种词汇描述着它的严重性,而来自太空的卫星图像更直观地揭示。
  • ps抠图换新背景(PS抠图换背景)
  • 2024-11-22PS抠图换背景这一讲说说利用选框工具抠图换背景,用实例说明简单步骤下面这张荷花图片中,荷花与荷叶翩翩起舞,可惜背景杂乱严重影响我们的视线抠图换背景的效果,看看是否比原片好看多了【实例】,。
  • 北京城际铁路提前检票 北京市郊铁路列车限员运行
  • 2024-11-22北京城际铁路提前检票 北京市郊铁路列车限员运行根据北京市疫情防控相关要求,为做好常态化疫情防控工作,切实保障乘客健康有序出行,市郊铁路各线严格执行列车防疫限员规定,列车达到规定人数后将停止检票进站假日期间,乘坐北京市郊铁路怀柔-密云线和S2线前往。
  • 干锅肥肠鱿鱼怎么做(干锅肥肠鱿鱼做法)
  • 2024-11-22干锅肥肠鱿鱼做法食材:肥肠400g、鱿鱼2条、线椒8个、土豆半个、洋葱1/3个、香菜1棵、方便面饼1个、苕粉150g、大葱2根、白糖5g、白芝麻适量、料酒15g鱿鱼处理干净,把膜能撕掉就尽量撕掉肥肠洗净用葱姜料酒腌制。
  • 橄榄油适合任何菜吗(橄榄菜竟不是橄榄做的菜)
  • 2024-11-22橄榄菜竟不是橄榄做的菜老婆饼里没老婆鱼香肉丝里找不着鱼外婆菜里不见外婆夫妻肺片不是夫妻的红烧狮子头烧的也不是狮子所以橄榄菜里有橄榄吗?没有?你以为我要说“没有”对不对?但其实橄榄菜里真有橄榄只不过这一筷子橄榄菜橄榄没多少大。
  • tvb吕四娘粤语(那个独一无二的吕四娘)
  • 2024-11-22那个独一无二的吕四娘作者:咖啡里的云声明:原创文章,禁止转载,抄袭必究!01《九五至尊》中,吕四娘其实是很难演的一个角色TVB剧有无数英姿飒爽的侠女珠玉在前,要有突破就必须有自己的特点张可颐饰演的吕四娘,抓住了古代侠女的。
  • 探秘非洲丛林生活(海外非洲埃塞俄比亚奇闻异事旅行生活)
  • 2024-11-22海外非洲埃塞俄比亚奇闻异事旅行生活1.这个水果不知道叫什么?在埃塞很常见,里面好多籽儿,没多少肉可以吃你们知道叫什么吗?不贵,大约6毛钱一个,吃着不甜,不知道是不是自己不会挑,没熟透的原因,还是本身就不甜2.现在到了埃塞雨季,有些人就。
  • 为什么会经常放屁而且放屁很臭(为什么有人经常放屁)
  • 2024-11-22为什么有人经常放屁众所周知,放屁是一种正常的生理现象屁这种气体,主要是来自人身体的大肠和直肠大肠和直肠分解食物时,产生的残渣就会通过气体的形式释放出来,这就是人们口中常说的放屁放屁是一种正常现象,但是放屁次数过多就应该。
  • 春联贴反了怎么处理(如何解决春联贴反了)
  • 2024-11-22如何解决春联贴反了对联贴反了可以撕下来重新贴,没有什么不好的说法按照传统规矩,面对大门右手方是上首,左手为下首,对联讲究平仄,上联最后一个字为仄音,下联最后一个字为平音,一声二声为平,三声四声为仄如果已经将对联贴好了,。