android 判断按home键,android – 如何在我的活动中检测用户按HOME键?

更新[2015年8月]:根据

JM Lord的评论,此答案可能无法按照设备Lollipop及以上的要求进行.见

Alternative to getRunningTasks in Android L

虽然,它的一个旧问题,但绝大多数的答案在我的API 17级及以上级别对我来说无效.我正在回答什么终于为我工作.我尝试了很多方法,但没有一个像今天一样工作.我试过答案

这个要点是,家里就像一个紧急逃生按钮.所以你不能覆盖它,但可以在某些方面检测它.

我尝试的一些(包括上面的答案),没有工作是:

>以多种方式使用keyCode == KeyEvent.KEYCODE_HOME

如上所述.现在,如果你阅读的文件

KeyEvent.KEYCODE_HOME,它说这个键是由

框架,并且不会传递到应用程序.所以没有了

现在有效

>我试过使用onUserLeaveHint().文件说:

Called as part of the activity lifecycle when an activity is about

to go into the background as the result of user choice. For example,

when the user presses the Home key, onUserLeaveHint() will be

called, but when an incoming phone call causes the in-call Activity

to be automatically brought to the foreground.

问题在于,当您启动一个活动时该方法也被调用

从您在UserleaveLint()上调用的活动中,

就像我的情况.详见Android onBackPressed/onUserLeaveHint问题.所以它不确定

只需按主页按钮即可打电话.

>调用onStop().当活动在现有活动之上时也可以被调用,并且完全覆盖它.所以这也不行.

最后以下为我工作:

因此,在您尝试检测主页按钮的活动的onPause()中,您可以检查应用程序是否已发送到后台.

@Override

public void onPause() {

if (isApplicationSentToBackground(this)){

// Do what you want to do on detecting Home Key being Pressed

}

super.onPause();

}

检查您是否是最近发送到后台的应用程序的功能:

public boolean isApplicationSentToBackground(final Context context) {

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

List tasks = am.getRunningTasks(1);

if (!tasks.isEmpty()) {

ComponentName topActivity = tasks.get(0).topActivity;

if (!topActivity.getPackageName().equals(context.getPackageName())) {

return true;

}

}

return false;

}

感谢@idish指出,不要忘记在清单中包含以下权限:

我不知道这是否有任何缺点,但对我来说很有用.希望有一天有帮助某人.

P.S:如果在已经使用FLAG_ACTIVITY_NO_HISTORY标志启动的活动中使用此方法,则这将不会有用,因为它会检查最近的历史记录,以确定是否单击“主页”按钮.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值