昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。
看了一下网上的资料,说下面的方法可以。(其实不行)
@Override public void onAttachedToWindow() { // TODO Auto-generated method stub Log.d("aeon","onAttachedToWindow"); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }
加了权限之后也不行。
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" > </uses-permission>
实验几次之后(android4.1 和android4.2)发现在单个的activity里面有以下几个方法可以使用:
方法1:onSaveInstanceState方法
下面这个方法可以处理home的监听问题。
protected void onSaveInstanceState(Bundle outState)
但这个方法不是很好,不推荐
方法2:onUserLeaveHint方法
@Override protected void onUserLeaveHint() { Log.d("aeon","onUserLeaveHint"); super.onUserLeaveHint(); }
这个方法会在onSaveInstanceState之前执行,根据api的解释,这个方法还比较合适的。
方法3:ACTION_CLOSE_SYSTEM_DIALOGS
在使用广播监听方面可以使用ACTION_CLOSE_SYSTEM_DIALOGS
//注册Receiver HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver(); registerReceiver(receiver, new IntentFilter( Intent. ACTION_CLOSE_SYSTEM_DIALOGS));
方法4:framework PhoneWindowManager.java 处理
想要完全监听home键需要在framework层去处理。
/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
里面去修改private void handleLongPressOnHome() 这个方法。
private void handleLongPressOnHome() { // We can't initialize this in init() since the configuration hasn't been loaded yet. if (mLongPressOnHomeBehavior < 0) { mLongPressOnHomeBehavior = mContext.getResources().getInteger(R.integer.config_longPressOnHomeBehavior); if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING || mLongPressOnHomeBehavior > LONG_PRESS_HOME_RECENT_SYSTEM_UI) { mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING; } } if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) { performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS); // Eat the longpress so it won't dismiss the recent apps dialog when // the user lets go of the home key mHomeLongPressed = true; } if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_DIALOG) { showOrHideRecentAppsDialog(RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS); } else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) { try { IStatusBarService statusbar = getStatusBarService(); if (statusbar != null) { statusbar.toggleRecentApps(); } } catch (RemoteException e) { Slog.e(TAG, "RemoteException when showing recent apps", e); // re-acquire status bar service next time it is needed. mStatusBarService = null; } } }
只要把handleLongPressOnHome里面做出相对应的处理就ok
相关推荐
Android 捕获home键
Android 监听Home键、锁屏、解屏处理方法,都有注释。使用简介: (1)、将内部类(广播类)作为MyBroadcastReceiver类的成员变量,方便activity使用 (2)、对外接口类(如:ScreenStateListener)作为...
此类为安卓源码 ,包括长按home键,电源键,back 键,音量键,等
Android APP开发过程中处理,home键点击事件,监听点击home键,做具体处理
此代码来自于https://github.com/shaobin0604/Android-HomeKey-Locker。目测有效文件存在于HomeLockerLib和HomeLockerSample文件夹。
拦截Home键。 按下Home键时停留在当前Activity; 亲测有效;
Android 屏蔽home,菜单,返回键 解锁,加锁
实现了针对android 4.0系统以上屏蔽home键的效果
模拟android长按home键,弹出近期任务。对应的文章为:http://blog.csdn.net/yanbin1079415046/article/details/8026613
Android 4.4、5.1、6.0 屏蔽Home键,改动java文件
android 采用windowmanager屏蔽home键
系统的总结了市面上各android 处理器屏蔽HOME键的方法,相信会对你有一定的帮助和启发。
主要介绍了Android监听home键的方法,结合实例形式较为详细的分析了Android实现监听home键的原理与具体实现技巧,需要的朋友可以参考下
昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,...
实现是通过AccessibilityService,国内部分厂商的rom可能不生效,本人测试的手机努比亚可以!
由于android4.0和2.x上的屏幕管理不一样,2.x上的屏蔽方法在4.0上会失效,使用一中新的方法来屏蔽4.0上的Home键。
Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activity,当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法...
主要介绍了Android 解决监听home键的几种方法的相关资料,需要的朋友可以参考下