`
aking86
  • 浏览: 82991 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android拦截HOME按键

阅读更多

Android 拦截 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 ...
分享到:
评论
4 楼 lijh 2013-12-12  

    [*]
[url][/url][flash=200,200][/flash]
引用
[u][/u][i][/i][/b][b][/b][b][/b][b][/b][b][b][/b]
3 楼 guobosheng 2012-09-07  
楼主,我只想拦截home键,不想屏蔽它,要怎么改啊?
2 楼 aking86 2012-02-20  
latty 写道
不知 你为何屏蔽Home键?解决什么方面的问题?

现在我有一种场景: 按下Home键后 会调用surfaceDestroyed,Android会进入到初始界面,然后长按Home键才能回到应用。但是这时的surface又重新创建。

我想要的效果是surface不重新创建 。 想用拦截Home键事件的方式解决 不知道是否可行

拦截HOME是因为项目中有需求提到按了HOME回到主页面,但程序要加个图标在状态栏。
surfaceDestroyed,里面可以加个判断,如果是home返回,就不执行了。home本身默认就不会引起Activity.onDestory()
1 楼 latty 2012-02-20  
不知 你为何屏蔽Home键?解决什么方面的问题?

现在我有一种场景: 按下Home键后 会调用surfaceDestroyed,Android会进入到初始界面,然后长按Home键才能回到应用。但是这时的surface又重新创建。

我想要的效果是surface不重新创建 。 想用拦截Home键事件的方式解决 不知道是否可行

相关推荐

    Android Home键拦截

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

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

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

    Android代码-屏蔽home按键

    Android-HomeKey-Locker Utility to disable HOME KEY in Android Activity. As there are a lot questions about "how to disable home button in android?" on Stack Overflow, such as how to disable home ...

    Android 4.4、5.1、6.0 屏蔽Home键

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

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

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

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

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

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

    本篇文章将深入探讨如何在Android中对Home键进行监听和拦截,包括在应用层监听Home键、处理Home键按压事件以及在框架层拦截Home键的方法。 首先,我们需要了解Android在应用中是无法拦截Home键的,即无法阻止Home键...

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

    代码如下: @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if(KeyEvent.KEYCODE_HOME==keyCode) android.os.Process.killProcess(android.os.Process.myPid()); return super.onKeyDown...

    ANDROID 开发屏蔽HOME键

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

    通过AccessibilityService实现系统按键监听功能

    在Android系统中, AccessibilityService 是一个非常重要的服务,它允许应用程序获取并响应用户与系统交互的事件,包括触摸屏幕、导航键操作等。这为开发者提供了深入用户界面交互的能力,例如辅助功能应用或者一些...

    Android 5.1锁屏屏蔽HOME键的Demo

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

    android一键返回HOME源码

    虽然大多数情况下,应用可以直接使用HOME键功能,但如果你的应用需要拦截并处理HOME键,可能需要声明`android.permission.BROADCAST_PACKAGE_REMOVED`权限,因为系统通常只允许系统应用拦截此事件。 5. 性能优化: ...

    android 4.0 上的HOME 键捕获

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

    android监听返回按钮事件的方法

    此外,如果希望在其他地方处理返回事件,例如在Fragment中,可以使用`onOptionsItemSelected()`方法监听`OptionsItemSelectedEvent`,并检查`MenuItem`的`itemId`是否为`android.R.id.home`,这代表了应用栏中的返回...

    Android应用源码之按键的处理-IT计算机-毕业设计.zip

    Android系统为每个按键分配了一个特定的整数值,例如`KeyEvent.KEYCODE_BACK`表示返回键,`KeyEvent.KEYCODE_HOME`表示主页键。根据不同的`keyCode`值,开发者可以执行相应的操作。 4. **事件处理**:通常,返回`...

    Androidpingbao_HomeHome_android_

    它们通常会涉及到Android的ActivityManagerService和WindowManagerService,通过拦截并处理系统的启动请求。 2. **锁屏功能**:实现锁屏功能需要创建一个全屏的Activity,并在用户尝试解锁时进行身份验证。这通常...

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

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

    android键盘锁死源码

    在Android系统中,Home键是用户最常用的按键之一,它允许用户快速返回主屏幕或切换应用。然而,在某些特定的应用场景下,如全屏游戏或视频播放时,开发者可能希望禁用Home键以提供更好的用户体验。这就涉及到了...

    Android监听Home键实例详解

    在Android系统中,监听Home键事件并非像监听其他硬件按键那样简单,因为Home键被设计为用户快速返回主屏幕的快捷方式,系统默认不会允许开发者对其进行完全的拦截和控制。然而,通过一些特殊的方式,我们可以实现对...

Global site tag (gtag.js) - Google Analytics