`

Android拦截HOME按键

阅读更多
转自:http://aking86.iteye.com/blog/1317186

主要就是重写 onAttachedToWindow () onKeyDown (...,...) 这两个方法。

前者是起到拦截作用的,后者是监听到HOME按键事件后的动作,如果没动作可以不要 onKeyDown。

还要注意,要加权限:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />


// 转载请注明出处: http://aking86.iteye.com/admin/blogs/1317186

     虽然网上有很多,但介绍的都不是很详细,也不算深入,我在这里研究了下,并把日志给捞了出来。

     里面包括 HOME拦截, BACK拦截,打捞日志。

@Override
	public void onAttachedToWindow() {
		Log.i(TAG, "Page01 -->onAttachedToWindow");
		this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
		super.onAttachedToWindow();
	}



@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		Log.i(TAG, "Page01 -->onKeyDown: keyCode: " + keyCode);
		if (KeyEvent.KEYCODE_HOME == keyCode) {
			Log.i(TAG, "HOME has been pressed yet ...");
			// android.os.Process.killProcess(android.os.Process.myPid());
			Toast.makeText(getApplicationContext(), "按了HOME 键...",
					Toast.LENGTH_LONG).show();
		}
		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键拦截

    为了在这些版本及更高版本的系统上拦截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