Android处理Home键方法小结
2015-04-19 21:35
148 查看
昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。在2.3版本以下重写下面方法就能重写home键public void onAttachedToWindow() {this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);super.onAttachedToWindow();}在4.0以上的版本中需要利用以下方法屏蔽和重写Home键,代码如下:public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000; //需要自己定义标志public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);//关键代码setContentView(R.layout.main);}再重写onKey事件即可。@Overridepublic boolean onKeyDown( int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (keyCode == event. KEYCODE_HOME) {return true;}return super.onKeyDown(keyCode, event);}PS:在AndroidMainfest.xml需要加权限:<uses-permission android:name = "android.permission.DISABLE_KEYGUARD"/><!-- 屏蔽HOME键需要的权限 -->在配置文件中,在你使用了Notification的activity中加一个属性android: android:launchMode="singleInstance"看了一下网上的资料,说下面的方法可以。(其实不行)Java代码 :
加了权限之后也不行。Xml代码
实验几次之后(android4.1 和android4.2)发现在单个的activity里面有以下几个方法可以使用:方法1:onSaveInstanceState方法下面这个方法可以处理home的监听问题。Java代码
但这个方法不是很好,不推荐方法2:onUserLeaveHint方法Java代码
这个方法会在onSaveInstanceState之前执行,根据api的解释,这个方法还比较合适的。方法3:ACTION_CLOSE_SYSTEM_DIALOGS在使用广播监听方面可以使用ACTION_CLOSE_SYSTEM_DIALOGSJava代码
方法4:framework PhoneWindowManager.java 处理想要完全监听home键需要在framework层去处理。/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java里面去修改private void handleLongPressOnHome() 这个方法。Java代码
只要把handleLongPressOnHome里面做出相对应的处理就ok
1 | * <a href= "http://home.51cto.com/index.php?s=/space/5017954" target= "_blank" > @Override </a> |
2 | * public |
3 | void onAttachedToWindow(){ |
4 | * //TODO Auto-generated method stub |
5 | *Log.d( "aeon" , "onAttachedToWindow" ); |
6 | * this .getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); |
7 | * super .onAttachedToWindow(); |
8 | *} |
1 | #< uses-permission |
2 | android:name = "android.permission.DISABLE_KEYGUARD" |
3 | > |
4 | #</ uses-permission > |
1 | protected |
2 | void onSaveInstanceState(BundleoutState) |
1 | * <a href= "http://home.51cto.com/index.php?s=/space/5017954" target= "_blank" > @Override </a> |
2 | * protected |
3 | void onUserLeaveHint(){ |
4 | *Log.d( "aeon" , "onUserLeaveHint" ); |
5 | * super .onUserLeaveHint(); |
6 | *} |
1 | * //注册Receiver |
2 | * |
3 |
4 | *HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver(); |
5 | *registerReceiver(receiver, new IntentFilter( |
6 | *Intent. ACTION_CLOSE_SYSTEM_DIALOGS)); |
01 | * private |
02 | void handleLongPressOnHome(){ |
03 | * //We can't initialize this in init() since the configuration hasn't been loaded yet. |
04 | * if (mLongPressOnHomeBehavior< 0 ){ |
05 | *mLongPressOnHomeBehavior |
06 | *= mContext.getResources().getInteger(R.integer.config_longPressOnHomeBehavior); |
07 | * if (mLongPressOnHomeBehavior< LONG_PRESS_HOME_NOTHING || |
08 | *mLongPressOnHomeBehavior > LONG_PRESS_HOME_RECENT_SYSTEM_UI) { |
09 | *mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING; |
10 | *} |
11 | *} |
12 | * |
13 |
14 | * if (mLongPressOnHomeBehavior!= LONG_PRESS_HOME_NOTHING) { |
15 | *performHapticFeedbackLw( null ,HapticFeedbackConstants.LONG_PRESS, false ); |
16 | *sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS); |
17 | * |
18 |
19 | * //Eat the longpress so it won't dismiss the recent apps dialog when |
20 | * //the user lets go of the home key |
21 | *mHomeLongPressed = true ; |
22 | *} |
23 | * |
24 |
25 | * if (mLongPressOnHomeBehavior== LONG_PRESS_HOME_RECENT_DIALOG) { |
26 | *showOrHideRecentAppsDialog(RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS); |
27 | *} else |
28 | if (mLongPressOnHomeBehavior== LONG_PRESS_HOME_RECENT_SYSTEM_UI) { |
29 | * try { |
30 | *IStatusBarService statusbar = getStatusBarService(); |
31 | * if (statusbar!= null ){ |
32 | *statusbar.toggleRecentApps(); |
33 | *} |
34 | *} catch (RemoteExceptione) { |
35 | *Slog.e(TAG, "RemoteExceptionwhen showing recent apps" ,e); |
36 | * //re-acquire status bar service next time it is needed. |
37 | *mStatusBarService = null ; |
38 | *} |
39 | *} |
40 | *} |
相关文章推荐
- 【Android】Android处理Home键方法小结
- Android处理Home键方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android开发中处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android开发中处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android开发中处理图片OOM (OutOfMemoryError) 的若干方法小结
- 【转】Android中几种图像特效处理方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结(好文,向作者致敬)
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结
- Android处理图片OOM的若干方法小结