通过该代码,我可以成功处理4.0以下版本的HomeKey,但是我在处理4.0以上版本的Homekey时遇到问题。 所以请帮助我解决该问题以处理4.0以上版本的HomeKey按下。因为它没有禁用Home press。

@Override
public void onAttachedToWindow()
{
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH)
{
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}

正如@j__m所说,不再支持TYPE_KEYGUARD。在其他问题上已经讨论了许多其他方法,但是这些方法在最新的API级别上无效。我会节省您的精力,并希望分享一些我所做的搜索,尝试和错误。我尝试了许多方法,但是在API级别17中,没有一个对我有用。

在Android上按下主屏幕按钮时的调用方法,

检测android中的主页按钮按下

我尝试过的一些方法(包括上面的答案)不起作用:

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

综上所述。现在,如果您阅读了

KeyEvent.KEYCODE_HOME,它表示This key is handled by the

framework and is never delivered to applications。所以不再

现在有效。

我尝试使用onUserLeaveHint()。 The documentation says:

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。

如果您没有从当前活动中调用任何活动(正在检测"主页"按钮),则可能是

能够使用这种方法。那个问题

是启动Activity时也会调用该方法

在您呼叫onUserleaveLint()的活动中,

就像我的情况一样。有关更多信息,请参见Android onBackPressed / onUserLeaveHint问题。所以不确定

只有按下主屏幕按钮才能调用它。

最后,以下内容对我有用:

看到如何检查Android中当前正在运行的应用程序?,您可以说如果您的任务是长按主屏幕按钮显示的最新任务,则该任务将被发送到后台(即已按下主屏幕按钮)。

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

@Override
public void onPause() {
if (isApplicationSentToBackground(this)){
// Home button pressed
// 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;
}

使用此工具,我成功地检测到Home Button单击。

希望这也对您有用。

你摇滚Shobhit Puri。 只需将topActivity更改为baseActivity。

非系统应用程序不再支持TYPE_KEYGUARD。处理归位键的唯一方法是启动器。