在 Android 中打开对话框时拦截 HOME 键

Posted

技术标签:

【中文标题】在 Android 中打开对话框时拦截 HOME 键【英文标题】:Intercept HOME key while dialog is opened in Android 【发布时间】:2012-01-28 08:35:09 【问题描述】:

如何在android屏幕上打开对话框时拦截HOME键。??

【问题讨论】:

在您的问题本身中,我可以看到很多问题。到目前为止你尝试过什么?您面临的问题是什么?等等…… 在屏幕上打开Dialog时,在此期间,如何拦截Home Key? 由于缺乏解释,您的问题很快就会被关闭。所以,最好是修改您的问题并针对您的问题。 【参考方案1】:

根据 android 实现,您无法使用 OnKeyListener() 等简单 API 捕获 Home 按钮键事件。

【讨论】:

【参考方案2】:

我得到了我的问题的解决方案。现在我可以按照我想要的方式成功拦截 HOME 按钮。我已在此博客中编写了所有步骤: https://nishandroid.blogspot.com/2012/01/intercept-home-key-android.html

【讨论】:

您在博客中提到的内容在我使用 ics 的情况下不起作用。【参考方案3】:

如果您想通过确定用户是否故意移出您的Activity 来正确管理Activity 中的对话框外观(点击backhome 按钮) 或无意中让其他活动隐藏了您的活动(例如来电) 使用onUserLeaveHint

例如:

@Override
protected void onUserLeaveHint() 
    super.onUserLeaveHint();

    mDialog.dismiss();

【讨论】:

onUserLeaveHint调用的无意中断。来自文档:“例如,当用户按下 Home 键时,会调用 onUserLeaveHint(),但是当有来电导致通话中的 Activity 自动被带到前台时,不会调用 onUserLeaveHint()关于被打断的活动。"【参考方案4】:

设置对话框的DialogInterface.OnKeyListener

new OnKeyListener() 

                @Override
                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) 
                    // TODO Auto-generated method stub

                    if(keyCode == KeyEvent.KEYCODE_HOME)
                        //do something
                    
                    return false;
                
            );

【讨论】:

以上方法没用。应用此方法无法解决问题。 @aNi 我最近使用 KeyDown 方法和 KeyEvent.KEYCODE_HOME 来检测 home 按键但它从未给 android 应用程序它是用于 Android 系统框架的。

以上是关于在 Android 中打开对话框时拦截 HOME 键的主要内容,如果未能解决你的问题,请参考以下文章

Android 5.0 Usb调试拦截分析及修改

Android拦截HOME键

从浏览器拦截链接以打开我的 Android 应用程序

android 对话框Dialog拦截activity事件通知

android 对话框Dialog拦截activity事件通知

android 对话框Dialog拦截activity事件通知