如何检测用户在我的活动中按HOME键?

如何检测用户在我的活动中按HOME键?

你能告诉我我的活动如何检测用户HOME按键?



紫衣仙女
浏览 332回答 3
3回答

开心每一天1111

根据JM Lord的评论,这个答案可能无法满足Lollipop及以上设备的要求。请参阅Android L中的getRunningTasks替代方案虽然,这是一个老问题,但大多数答案在API级别17及以上版本中对我不起作用。我正在回答最终为我工作的事情。我尝试了很多方法,但没有一个像今天一样工作。我试过答案在Android上按下主页按钮时的调用方法,在android和中检测主页按钮按下覆盖主页按钮 - 如何摆脱选择?。要点是Home就像一个紧急逃生按钮。所以你不能覆盖它,但可以在某些方面检测它。我试过的一些(包括上面的答案)但没有用的是:keyCode==KeyEvent.KEYCODE_HOME如上所述以多种方式使用。现在,如果您阅读了KeyEvent.KEYCODE_HOME的文档&nbsp;,那就说明了这一点This key is handled by the framework and is never delivered to applications。所以它现在不再有效了。我试过用onUserLeaveHint()。文件说:当活动即将作为用户选择的结果进入后台时,被称为活动生命周期的一部分。例如,当用户按下Home键时,将调用onUserLeaveHint(),但是当传入的电话呼叫导致呼入时Activity自动被带到前台。问题在于,当你Activity&nbsp;从你正在调用的活动中启动一个方法时,也会调用该方法onUserleaveLint(),就像我的情况一样。有关更多信息,请参阅Android onBackPressed / onUserLeaveHint问题。所以它不确定它只能通过按下主页按钮来调用。打电话onStop()。当活动出现在现有活动之上并完全覆盖它时,也可以调用它。所以这也行不通。最后,以下内容对我有用:眼看如何检查当前正在运行的应用程序在Android中?你可以说,如果你的是最近的任务,长按主页按钮显示,然后它被发送到后台。因此,在您onPause()尝试检测按下主页按钮的活动中,您可以检查应用程序是否已发送到后台。@Overridepublic&nbsp;void&nbsp;onPause()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isApplicationSentToBackground(this)){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Do&nbsp;what&nbsp;you&nbsp;want&nbsp;to&nbsp;do&nbsp;on&nbsp;detecting&nbsp;Home&nbsp;Key&nbsp;being&nbsp;Pressed&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;super.onPause();}用于检查您的应用是否是最近发送到后台的应用的功能:public&nbsp;boolean&nbsp;isApplicationSentToBackground(final&nbsp;Context&nbsp;context)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;ActivityManager&nbsp;am&nbsp;=&nbsp;(ActivityManager)&nbsp;context.getSystemService(Context.ACTIVITY_SERVICE); &nbsp;&nbsp;&nbsp;&nbsp;List<RunningTaskInfo>&nbsp;tasks&nbsp;=&nbsp;am.getRunningTasks(1); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!tasks.isEmpty())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComponentName&nbsp;topActivity&nbsp;=&nbsp;tasks.get(0).topActivity; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!topActivity.getPackageName().equals(context.getPackageName()))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;}感谢@idish指出不要忘记在清单中包含以下权限:<uses-permission&nbsp;android:name="android.permission.GET_TASKS"&nbsp;/>我不确定这是否有任何缺点,但它对我有用。希望有一天能帮助某人。PS:如果你在使用FLAG_ACTIVITY_NO_HISTORYflag&nbsp;启动的Activity中使用此方法,那么这将无用,因为它会检查最近的历史记录以确定是否Home单击了按钮。

翻翻过去那场雪

您可以通过Activity.onUserLeaveHint()检测HOME按钮按下。在两种情况下调用此方法;&nbsp;当用户按下HOME时以及启动新活动时。确保以某种方式区分两者。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android