`

android 捕获并处理HOME键

阅读更多
    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键,并探讨相关知识点。 首先,我们要了解Android系统的事件处理机制。当用户按下Home键时,系统会发送一个ACTION_HOME_DOWN广播,然后是ACTION_HOME_UP。默认情况下,...

    android 4.0 上的HOME 键捕获

    当这样的对话框显示时,它可以捕获Home键事件,并通过设置监听器来处理这些事件。 #### 使用对话框捕获Home键 为了实现Home键的捕获,可以创建一个`AlertDialog`并设置其类型为`WindowManager.LayoutParams.TYPE_...

    AndroidHome键

    为了捕获Home键事件,我们不能直接重写Home键的监听,因为Android系统不允许这样做以保持用户体验的一致性。但是,可以通过注册BroadcastReceiver来间接实现。BroadcastReceiver可以监听到系统发送的各种广播,包括...

    Android拦截HOME按键

    因此,我们可以通过重写这些生命周期方法来监听并处理HOME键事件。 在AndroidManifest.xml中,我们需要为我们的Activity添加一个特殊的FLAG_ACTIVITY_NEW_TASK标志,这使得Activity可以作为新的任务栈的起点: ```...

    android 4.0以上屏蔽Home键

    另外,可以使用Activity的onKeyDown()和onKeyUp()方法来捕获并处理Home键的按下和释放事件。虽然不能直接阻止Home键的行为,但我们可以在检测到Home键按下时做一些处理,比如弹出对话框提示用户,或者执行其他操作。...

    Android高级应用源码-捕获Home键.zip

    这个"Android高级应用源码-捕获Home键"的项目,旨在提供一种方法来拦截和处理Home键事件,以实现更复杂的交互逻辑。 捕获Home键的关键在于重写`Activity`的`onKeyDown()`或`onBackPressed()`方法。在`onKeyDown()`...

    Android 5.1锁屏屏蔽HOME键的Demo

    接下来,我们需要在Service或Activity中重写onKeyDown()方法,捕获并处理HOME键事件: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { //...

    android 采用windowmanager屏蔽home键

    悬浮窗口可以覆盖在其他应用之上,我们可以通过监听悬浮窗口的触摸事件来捕获Home键的按下情况。 1. **添加权限**:在AndroidManifest.xml文件中,需要添加以下权限来允许创建浮动窗口: ```xml &lt;uses-permission ...

    Android Home键拦截

    标题“Android Home键拦截”所涉及的知识点就是如何在Android应用中捕获并控制Home键的事件,使它不执行默认行为,而是保持当前Activity处于前台。 首先,要实现Home键拦截,我们需要重写`onKeyDown()`方法。这个...

    android 4.0以下屏蔽Home键

    为了阻止这个过程,我们需要重写onKeyDown()方法,捕获Home键的事件。 以下是一个简单的示例,展示了如何在Android 4.0以下的版本中屏蔽Home键: 1. 首先,在你的Activity中,重写onKeyDown()方法: ```java @...

    Android 屏蔽home,菜单,返回键 解锁,加锁

    在Android中,屏蔽Home键通常涉及到对系统的BroadcastReceiver和Intent.ACTION.MAIN这两个关键元素的处理。首先,创建一个BroadcastReceiver,监听ACTION.MAIN动作,当用户按下Home键时,可以捕获这个事件: ```...

    Android应用源码之按键的处理.zip

    本资料包"Android应用源码之按键的处理.zip"显然聚焦于解析如何在Android应用程序中捕获并响应用户输入的按键操作。下面我们将深入探讨这个主题。 首先,Android系统为开发者提供了两种主要的按键事件处理方式:第...

    Android 屏蔽和捕获Home键的示例代码

    在Android API Level 5及以上版本,我们可以利用`onAttachedToWindow()`方法来尝试改变窗口类型,从而捕获Home键事件。在`onAttachedToWindow()`中,我们将窗口类型设置为`WindowManager.LayoutParams.TYPE_KEYGUARD...

    安卓键盘输入相关-捕获Home键.rar

    这个压缩包"安卓键盘输入相关-捕获Home键.rar"提供的资源,就是关于如何在Android应用中实现Home键捕获的一个示例。 首先,我们需要理解Android的生命周期。在Android应用中,当用户按下Home键时,系统会调用...

    Android 4.4、5.1、6.0 屏蔽Home键

    因此,我们可以重写这个方法来捕获并处理Home键的点击事件。 在Android 4.4 KitKat中,可以这样实现: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent....

    android监听home按键实例

    在Android开发中,有时我们需要对用户的操作进行特殊处理,例如监听Home键的按下事件。Home键是Android系统中最基础的功能键之一,通常用于退出当前应用并返回桌面。然而,由于Android系统的安全性和权限管理,直接...

    Android_Home.rar_Home Home

    这些文件将展示如何捕获和处理Home键事件,通常会涉及到Android的Activity生命周期方法,如`onKeyDown()`或`onBackPressed()`。 4. **权限和API级别**: 使用自定义Home键处理可能需要特定的Android权限,比如使用...

    Android PopupWindow的menu和4.12版本拦截home键

    然而,从Android 3.1版本开始,引入了ActivityManager的onKeyDown()方法,使得在某些特定条件下可以捕获并处理Home键。在4.12版本,如果应用具有SYSTEM_ALERT_WINDOW权限(也称为“浮动窗口”权限),理论上是可以...

    android获取home键 在2.X到4.X上亲测能用

    然而,由于安全性和用户体验的考虑,从Android 3.0(API级别11)开始,Google对Home键的行为进行了调整,使得应用程序很难直接监听或捕获Home键事件。在Android 2.X到4.X的版本中,开发者可以通过一些方式来尝试获取...

Global site tag (gtag.js) - Google Analytics