- 浏览: 82977 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lijh:
<table class="bbcode&qu ...
Android拦截HOME按键 -
ccnu_ouy520:
有人能详细一点吗?
如何获取Android手机中所有的短信 -
ccnu_ouy520:
写的挺好的,我也看了这篇文章 有几个问题
这个getCont ...
如何获取Android手机中所有的短信 -
guobosheng:
楼主,我只想拦截home键,不想屏蔽它,要怎么改啊?
Android拦截HOME按键 -
aking86:
<div class="quote_title ...
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();
}
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 页面
}
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
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 ...
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 ...
- D_307Home.7z (66.7 KB)
- 下载次数: 311
评论
4 楼
lijh
2013-12-12
[*]
引用
[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键后 会调用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键事件的方式解决 不知道是否可行
现在我有一种场景: 按下Home键后 会调用surfaceDestroyed,Android会进入到初始界面,然后长按Home键才能回到应用。但是这时的surface又重新创建。
我想要的效果是surface不重新创建 。 想用拦截Home键事件的方式解决 不知道是否可行
发表评论
-
demo-tel
2013-01-21 00:18 0Demo-Tel PhoneStateListener ... -
mobile
2012-12-21 01:21 0mobile -
android学习笔记之Base64编码
2012-12-10 23:31 0Base64 http://blog.sina.com. ... -
Android中对图像进行Base64编码
2012-12-10 23:22 0Android中对图像进行Base64 ... -
android中json转换成List<Map>
2012-11-20 01:07 0android中json转换成List<Map&g ... -
android自定义控件
2012-10-24 00:41 3822自定义控件 TitleBar 实现步骤: 1.先写好 ... -
ratingBar demo
2012-10-18 23:54 1583关于 ratingBar 参考 资料写的demo ht ... -
android 屏幕保持唤醒
2012-10-09 22:41 0android 屏幕保持唤醒 http://www.cnb ... -
Android系统在超级终端下必会的命令大全
2012-10-05 11:09 1329[教程] Android系统在超级终端下必会的命令大全 ... -
360
2012-07-18 23:35 0写道 package org.android; ... -
android工具箱
2012-04-08 23:40 0android工具箱 -
droiddraw 21 布局工具
2012-03-28 23:17 0droiddraw 21 布局工具 -
Android通讯录
2012-03-26 00:29 0下面展示一段在Android1.5上读取手机通讯录的代码1 ... -
viewPager
2012-03-21 06:12 2032ViewPager MainActivity ... -
android应酬资料
2012-03-15 01:28 934android面试资料。收集的 ... -
android 资料
2012-03-15 01:08 13021.view如何刷新?简述什么是双缓冲?andro ... -
android杀进程方法
2012-02-29 01:15 2209android杀进程方法 源文: http://www.cn ... -
android手机设置自己喜欢的铃声
2012-02-26 18:51 2147存放手机铃声的的路径(三星 I8150 手机): /sys ... -
如何删除android手机自带的系统程序
2012-02-24 00:23 2671操作步骤: 工具准备: DooMLoRD , (Sup ... -
Android Mms 源码结构
2012-02-20 01:12 2381Android Mms 源码结构 源文:http:// ...
相关推荐
为了在这些版本及更高版本的系统上拦截Home键,你需要创建一个自定义的`Application`类,并注册为Home键监听器。以下是如何实现这一功能: ```java public class CustomApplication extends Application implements...
在Android系统中,Home键是用户最常用的导航键之一,用于快速返回主屏幕。然而,在特定的应用场景下,比如玩游戏时,尤其是像“王者荣耀”这样的竞技游戏,误触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键涉及创建自定义Service、注册BroadcastReceiver、拦截Home键事件以及配置AndroidManifest.xml。通过这种方式,可以实现对Home键的控制,但需谨慎处理,避免对系统稳定性造成...
Android 监听Home键、锁屏、解屏处理方法,都有注释。使用简介: (1)、将内部类(广播类)作为MyBroadcastReceiver类的成员变量,方便activity使用 (2)、对外接口类(如:ScreenStateListener)作为...
在Android系统中,Home键、菜单键(在某些设备上是多任务键)和返回键是用户界面的重要组成部分,它们提供了导航和操作的基本方式。然而,在特定的应用场景下,如开发特殊应用或游戏时,开发者可能需要屏蔽这些系统...
本篇文章将深入探讨如何在Android中对Home键进行监听和拦截,包括在应用层监听Home键、处理Home键按压事件以及在框架层拦截Home键的方法。 首先,我们需要了解Android在应用中是无法拦截Home键的,即无法阻止Home键...
代码如下: @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系统中, AccessibilityService 是一个非常重要的服务,它允许应用程序获取并响应用户与系统交互的事件,包括触摸屏幕、导航键操作等。这为开发者提供了深入用户界面交互的能力,例如辅助功能应用或者一些...
由于直接拦截HOME键可能违反Android的行为规范,因此通常会创建一个悬浮窗或全屏Activity,覆盖整个屏幕,达到在锁屏状态下屏蔽HOME键的效果。 接下来,我们需要在Service或Activity中重写onKeyDown()方法,捕获并...
虽然大多数情况下,应用可以直接使用HOME键功能,但如果你的应用需要拦截并处理HOME键,可能需要声明`android.permission.BROADCAST_PACKAGE_REMOVED`权限,因为系统通常只允许系统应用拦截此事件。 5. 性能优化: ...
这样做的目的是让这个对话框具有足够的优先级来拦截Home键事件。接下来的关键步骤是为对话框添加一个`OnKeyListener`,该监听器可以在Home键被按下时触发。 ```java AlertDialog dialog; dialog = new AlertDialog....
此外,如果希望在其他地方处理返回事件,例如在Fragment中,可以使用`onOptionsItemSelected()`方法监听`OptionsItemSelectedEvent`,并检查`MenuItem`的`itemId`是否为`android.R.id.home`,这代表了应用栏中的返回...
Android系统为每个按键分配了一个特定的整数值,例如`KeyEvent.KEYCODE_BACK`表示返回键,`KeyEvent.KEYCODE_HOME`表示主页键。根据不同的`keyCode`值,开发者可以执行相应的操作。 4. **事件处理**:通常,返回`...
它们通常会涉及到Android的ActivityManagerService和WindowManagerService,通过拦截并处理系统的启动请求。 2. **锁屏功能**:实现锁屏功能需要创建一个全屏的Activity,并在用户尝试解锁时进行身份验证。这通常...
因此,除非有特别的需求,否则不建议完全拦截Home键。在实际开发中,通常会结合使用这些方法,比如在用户执行特定操作时短暂监听Home键,或者在监听到Home键时执行某些后台任务。 "HomeDemo"项目就是围绕这些技术点...
在Android系统中,Home键是用户最常用的按键之一,它允许用户快速返回主屏幕或切换应用。然而,在某些特定的应用场景下,如全屏游戏或视频播放时,开发者可能希望禁用Home键以提供更好的用户体验。这就涉及到了...
在Android系统中,监听Home键事件并非像监听其他硬件按键那样简单,因为Home键被设计为用户快速返回主屏幕的快捷方式,系统默认不会允许开发者对其进行完全的拦截和控制。然而,通过一些特殊的方式,我们可以实现对...