1. 在activity中加上这段代码就可以屏蔽home键(onKeyDown事件会捕捉到home键)。
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
} 2.因为android系统自己对与home键power键在PhoneWindowManager中做了处理,不会返回到上层应用的。以下为系统源码:
\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java 1089行
if (code == KeyEvent.KEYCODE_HOME) {
// If a system window has focus, then it doesn't make sense
// right now to interact with applications.
WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
if (attrs != null) {
final int type = attrs.type;
if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
|| type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
// the "app" is keyguard, so give it the key
return false;
}
final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
for (int i=0; i<typeCount; i++) {
if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
// don't do anything, but also don't pass it to the app
return true;
}
}
}
\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java 1089行
if (code == KeyEvent.KEYCODE_HOME) {
// If a system window has focus, then it doesn't make sense
// right now to interact with applications.
WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
if (attrs != null) {
final int type = attrs.type;
if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
|| type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
// the "app" is keyguard, so give it the key
return false;
}
final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
for (int i=0; i<typeCount; i++) {
if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
// don't do anything, but also don't pass it to the app
return true;
}
}
}
type == WindowManager.LayoutParams.TYPE_KEYGUARD这一句,我们可以看到,android对于锁屏特殊判断了,所以我就模拟这个进行的实现,只是有一点,activity中重写onAttachedToWindow()方法需要api 5以上。
摘自 xiaoxiaobian3310903的专栏
分享到:
相关推荐
下面将详细阐述如何在Android应用中捕获Home键,并探讨相关知识点。 首先,我们要了解Android系统的事件处理机制。当用户按下Home键时,系统会发送一个ACTION_HOME_DOWN广播,然后是ACTION_HOME_UP。默认情况下,...
当这样的对话框显示时,它可以捕获Home键事件,并通过设置监听器来处理这些事件。 #### 使用对话框捕获Home键 为了实现Home键的捕获,可以创建一个`AlertDialog`并设置其类型为`WindowManager.LayoutParams.TYPE_...
为了捕获Home键事件,我们不能直接重写Home键的监听,因为Android系统不允许这样做以保持用户体验的一致性。但是,可以通过注册BroadcastReceiver来间接实现。BroadcastReceiver可以监听到系统发送的各种广播,包括...
因此,我们可以通过重写这些生命周期方法来监听并处理HOME键事件。 在AndroidManifest.xml中,我们需要为我们的Activity添加一个特殊的FLAG_ACTIVITY_NEW_TASK标志,这使得Activity可以作为新的任务栈的起点: ```...
另外,可以使用Activity的onKeyDown()和onKeyUp()方法来捕获并处理Home键的按下和释放事件。虽然不能直接阻止Home键的行为,但我们可以在检测到Home键按下时做一些处理,比如弹出对话框提示用户,或者执行其他操作。...
这个"Android高级应用源码-捕获Home键"的项目,旨在提供一种方法来拦截和处理Home键事件,以实现更复杂的交互逻辑。 捕获Home键的关键在于重写`Activity`的`onKeyDown()`或`onBackPressed()`方法。在`onKeyDown()`...
接下来,我们需要在Service或Activity中重写onKeyDown()方法,捕获并处理HOME键事件: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { //...
悬浮窗口可以覆盖在其他应用之上,我们可以通过监听悬浮窗口的触摸事件来捕获Home键的按下情况。 1. **添加权限**:在AndroidManifest.xml文件中,需要添加以下权限来允许创建浮动窗口: ```xml <uses-permission ...
标题“Android Home键拦截”所涉及的知识点就是如何在Android应用中捕获并控制Home键的事件,使它不执行默认行为,而是保持当前Activity处于前台。 首先,要实现Home键拦截,我们需要重写`onKeyDown()`方法。这个...
为了阻止这个过程,我们需要重写onKeyDown()方法,捕获Home键的事件。 以下是一个简单的示例,展示了如何在Android 4.0以下的版本中屏蔽Home键: 1. 首先,在你的Activity中,重写onKeyDown()方法: ```java @...
在Android中,屏蔽Home键通常涉及到对系统的BroadcastReceiver和Intent.ACTION.MAIN这两个关键元素的处理。首先,创建一个BroadcastReceiver,监听ACTION.MAIN动作,当用户按下Home键时,可以捕获这个事件: ```...
本资料包"Android应用源码之按键的处理.zip"显然聚焦于解析如何在Android应用程序中捕获并响应用户输入的按键操作。下面我们将深入探讨这个主题。 首先,Android系统为开发者提供了两种主要的按键事件处理方式:第...
因此,我们可以重写这个方法来捕获并处理Home键的点击事件。 在Android 4.4 KitKat中,可以这样实现: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent....
在Android API Level 5及以上版本,我们可以利用`onAttachedToWindow()`方法来尝试改变窗口类型,从而捕获Home键事件。在`onAttachedToWindow()`中,我们将窗口类型设置为`WindowManager.LayoutParams.TYPE_KEYGUARD...
这个压缩包"安卓键盘输入相关-捕获Home键.rar"提供的资源,就是关于如何在Android应用中实现Home键捕获的一个示例。 首先,我们需要理解Android的生命周期。在Android应用中,当用户按下Home键时,系统会调用...
在Android开发中,有时我们需要对用户的操作进行特殊处理,例如监听Home键的按下事件。Home键是Android系统中最基础的功能键之一,通常用于退出当前应用并返回桌面。然而,由于Android系统的安全性和权限管理,直接...
这些文件将展示如何捕获和处理Home键事件,通常会涉及到Android的Activity生命周期方法,如`onKeyDown()`或`onBackPressed()`。 4. **权限和API级别**: 使用自定义Home键处理可能需要特定的Android权限,比如使用...
然而,从Android 3.1版本开始,引入了ActivityManager的onKeyDown()方法,使得在某些特定条件下可以捕获并处理Home键。在4.12版本,如果应用具有SYSTEM_ALERT_WINDOW权限(也称为“浮动窗口”权限),理论上是可以...
然而,由于安全性和用户体验的考虑,从Android 3.0(API级别11)开始,Google对Home键的行为进行了调整,使得应用程序很难直接监听或捕获Home键事件。在Android 2.X到4.X的版本中,开发者可以通过一些方式来尝试获取...