`

拦截Home键

 
阅读更多
主要就是重写 onAttachedToWindow () 和 onKeyDown (...,...) 这两个方法。

前者是起到拦截作用的,后者是监听到HOME按键事件后的动作,如果没动作可以不要 onKeyDown。
还要注意,要加权限:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD "></uses-permission>

// 转载请注明出处: http://aking86.iteye.com/admin/blogs/1317186
     虽然网上有很多,但介绍的都不是很详细,也不算深入,我在这里研究了下,并把日志给捞了出来。
     里面包括 HOME拦截, BACK拦截,打捞日志。
@Override
    public void onAttachedToWindow () {
        System.out.println("Page01 -->onAttachedToWindow");
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
        super.onAttachedToWindow();
    }


@Override
    public boolean onKeyDown (int keyCode, KeyEvent event) {
        System.out.println("Page01 -->onKeyDown: keyCode: " + keyCode);
        if (KeyEvent.KEYCODE_HOME == keyCode) {
            System.out.println("HOME has been pressed yet ..."); 
            // android.os.Process.killProcess(android.os.Process.myPid()); 
            Toast.makeText(getApplicationContext(), "按了HOME 键...",
                    Toast.LENGTH_LONG).show();
        } else if (KeyEvent.KEYCODE_BACK == keyCode) {
            System.out.println("BACK has been pressed yet ..."); //按了返回 
        }
        return super.onKeyDown(keyCode, event); // 不会回到 home 页面 
    }


通过打印日志,还得出一个结论:
onAttachedToWindow() 方法只会执行一次,也就是在第一次 onResume() 之后,以后就不再执行了。
下面是我打印的日志。包含了Activity的生命周期,查看起来很方便。操作流程也就是打开一个页面,先按下HOME,弹出提示,再按下一个Button,里面是 finish()方法。

[root ]# adb logcat -d -v time -s System.out:I 
12-19 13:19:43.290 I/System.out( 824): Page01 -->onStart
12-19 13:19:43.290 I/System.out( 824): Page01 -->onResume
12-19 13:19:43.369 I/System.out( 824): Page01 -->onAttachedToWindow 
12-19 13:19:50.959 I/System.out( 824): Page01 -->onKeyDown: keyCode: 3 
12-19 13:19:50.959 I/System.out( 824): HOME has been pressed yet ... 
12-19 13:22:17.999 I/System.out( 824): Page01 click to exit(finish)
12-19 13:22:18.079 I/System.out( 824): Page01 -->onPause
12-19 13:22:18.590 I/System.out( 824): Page01 -->onStop
12-19 13:22:18.590 I/System.out( 824): Page01 -->onDestroy


以下是进了第一个页面,再进第二个页面,再回到第一个页面,再按HOME按键。正常拦截到。

[root ]# adb logcat -d -v time -s System.out:I 
12-19 13:42:09.900 I/System.out( 852): Page01 -->onStart
12-19 13:42:09.910 I/System.out( 852): Page01 -->onResume
12-19 13:42:09.969 I/System.out( 852): Page01 -->onAttachedToWindow 
12-19 13:42:19.659 I/System.out( 852): Page01 click to page02
12-19 13:42:19.721 I/System.out( 852): Page01 -->onPause
12-19 13:42:19.990 I/System.out( 852): Page02 -->onStart
12-19 13:42:19.990 I/System.out( 852): Page02 -->onResume
12-19 13:42:20.430 I/System.out( 852): Page01 -->onStop
12-19 13:42:29.149 I/System.out( 852): Page02 click to page01 (finish)
12-19 13:42:29.229 I/System.out( 852): Page02 -->onPause
12-19 13:42:29.349 I/System.out( 852): Page01 -->onStart
12-19 13:42:29.349 I/System.out( 852): Page01 -->onResume
12-19 13:42:29.752 I/System.out( 852): Page02 -->onStop
12-19 13:42:29.752 I/System.out( 852): Page02 -->onDestroy
12-19 13:42:45.779 I/System.out( 852): Page01 -->onKeyDown: keyCode: 3 
12-19 13:42:45.779 I/System.out( 852): HOME has been pressed yet ... 
分享到:
评论

相关推荐

    Android拦截HOME按键

    但是,这种方法存在一个问题:从Android 3.0(API级别11)开始,系统不允许开发者直接拦截HOME键,以保护用户体验。在高版本的Android中,这种方式可能无效。为了解决这个问题,我们可以利用BroadcastReceiver来监听...

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

    在4.12版本,如果应用具有SYSTEM_ALERT_WINDOW权限(也称为“浮动窗口”权限),理论上是可以尝试拦截Home键的。但请注意,这种做法并不鼓励,因为它可能会影响用户的正常操作流,甚至可能导致应用被谷歌Play商店...

    Android Home键拦截

    为了在这些版本及更高版本的系统上拦截Home键,你需要创建一个自定义的`Application`类,并注册为Home键监听器。以下是如何实现这一功能: ```java public class CustomApplication extends Application implements...

    Android 4.4、5.1、6.0 屏蔽Home键

    在Android 4.4、5.1和6.0版本中屏蔽Home键涉及创建自定义Service、注册BroadcastReceiver、拦截Home键事件以及配置AndroidManifest.xml。通过这种方式,可以实现对Home键的控制,但需谨慎处理,避免对系统稳定性造成...

    android 免Root屏蔽home键,通过AccessibilityService,屏蔽按键。打王者防误触

    在Android系统中,Home键是用户最常用的导航键之一,用于快速返回主屏幕。然而,在特定的应用场景下,比如玩游戏时,尤其是像“王者荣耀”这样的竞技游戏,误触Home键可能会导致游戏进程中断,影响玩家体验。为了...

    android4.0版本以上对Home键从底层拦截操作

    在Android 4.0(Ice Cream Sandwich)及更高版本中,开发者可以实现对Home键的底层监听和拦截操作,这是为了提供更丰富的用户体验和应用程序控制能力。本文将深入探讨这一功能,包括其实现原理、代码解析以及实际...

    Android中Home键的监听和拦截示例

    通过监听和拦截Home键的按压事件,我们可以实现自定义的应用行为,以提升用户体验。本篇文章将深入探讨如何在Android中对Home键进行监听和拦截,包括在应用层监听Home键、处理Home键按压事件以及在框架层拦截Home键...

    Android 监听Home键、锁屏、解屏(落雨敏详细讲解)

    Android 监听Home键、锁屏、解屏处理方法,都有注释。使用简介:  (1)、将内部类(广播类)作为MyBroadcastReceiver类的成员变量,方便activity使用  (2)、对外接口类(如:ScreenStateListener)作为...

    屏蔽Home+Back键

    然后,我们需要监听和拦截Home键和Back键的事件。在Android中,可以重写Activity的`onKeyDown()`和`onKeyUp()`方法,检测Keycode为`KEYCODE_HOME`(Home键)和`KEYCODE_BACK`(Back键)的按键事件。当检测到这些事件...

    android 4.0 上的HOME 键捕获

    这样做的目的是让这个对话框具有足够的优先级来拦截Home键事件。接下来的关键步骤是为对话框添加一个`OnKeyListener`,该监听器可以在Home键被按下时触发。 ```java AlertDialog dialog; dialog = new AlertDialog....

    亲测,android能锁屏监控到home键

    但需要注意的是,自Android 3.1(API级别12)起,为了保护用户体验,直接拦截Home键的行为被限制,除非应用具有SYSTEM_ALERT_WINDOW权限。 - **AccessibilityService**: 如果需要在全局范围内监听Home键,可以使用...

    Android 5.1锁屏屏蔽HOME键的Demo

    由于直接拦截HOME键可能违反Android的行为规范,因此通常会创建一个悬浮窗或全屏Activity,覆盖整个屏幕,达到在锁屏状态下屏蔽HOME键的效果。 接下来,我们需要在Service或Activity中重写onKeyDown()方法,捕获并...

    ANDROID 开发屏蔽HOME键

    在Android开发中,有时我们可能需要在特定场景下屏蔽或拦截HOME键的默认行为,例如在用户进行关键操作时防止他们意外退出应用。标题提到的"ANDROID 开发屏蔽HOME键"是一个常见的话题,尤其是在定制系统或者特殊应用...

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

    因此,除非有特别的需求,否则不建议完全拦截Home键。在实际开发中,通常会结合使用这些方法,比如在用户执行特定操作时短暂监听Home键,或者在监听到Home键时执行某些后台任务。 "HomeDemo"项目就是围绕这些技术点...

    android里面屏蔽home键/禁止Home键或者随你DIY

    可以先禁止Home键,再在onKeyDown里处理按键值,点然后在击Home键的时候就把程序关闭,或者随你DIY。 代码如下: @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if(KeyEvent.KEYCODE_HOME==...

    Android4.0.x Home键事件拦截监听的方法

    然而,在某些特殊情况下,开发者可能需要监听并拦截Home键事件,比如在应用程序执行关键操作时防止用户意外退出。本篇文章将详细讲解如何在Android 4.0.x版本中实现Home键事件的拦截监听,并对比Android 2.3.x的实现...

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

    在Android系统中,Home键、菜单键(在某些设备上是多任务键)和返回键是用户界面的重要组成部分,它们提供了导航和操作的基本方式。然而,在特定的应用场景下,如开发特殊应用或游戏时,开发者可能需要屏蔽这些系统...

    android 4.0以上屏蔽Home键

    在Android 4.0之前,开发者可以通过注册一个BroadcastReceiver监听ACTION_HOME_KEY_DOWN和ACTION_HOME_KEY_UP事件来实现Home键的拦截。但在4.0之后,出于安全和用户体验考虑,谷歌移除了这些API,直接禁止了对Home键...

    Android 捕获home键

    需要注意的是,直接捕获Home键并不总是可行的,因为Android从4.0版本(API级别14)开始限制了对Home键的拦截,主要是为了保持用户体验的一致性。对于API 14及更高版本,可以尝试重写Activity的onKeyDown和onKeyUp...

Global site tag (gtag.js) - Google Analytics