实验几次之后(android4.1 和android4.2)发现在单个的activity里面有以下几个方法可以使用:

方法1:onSaveInstanceState方法

下面这个方法可以处理home的监听问题。

Java代码
protected void onSaveInstanceState(Bundle outState)  

但这个方法不是很好,不推荐

方法2:onUserLeaveHint方法

Java代码

@Override    protected void onUserLeaveHint() {        Log.d("aeon","onUserLeaveHint");        super.onUserLeaveHint();    }

这个方法会在onSaveInstanceState之前执行,根据api的解释,这个方法还比较合适的。

方法3:ACTION_CLOSE_SYSTEM_DIALOGS

在使用广播监听方面可以使用ACTION_CLOSE_SYSTEM_DIALOGS

Java代码

  

//注册Receiver HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver(); registerReceiver(receiver, new IntentFilter(                           Intent. ACTION_CLOSE_SYSTEM_DIALOGS));

方法4:frameworkPhoneWindowManager.java 处理

想要完全监听home键需要在framework层去处理。

/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

里面去修改private void handleLongPressOnHome() 这个方法。

Java代码
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

更多相关文章

  1. 在Android中实现全屏显示的方法
  2. Mac完整卸载Android Studio的方法
  3. 查看Android ADT Plugin版本的方法
  4. Android DEX 方法超过64K限制
  5. CyanogenMod开源代码

随机推荐

  1. android 进度对话框(ProgressDialog)的使
  2. 一个Activity的显示过程总结(一)
  3. 【总结】Mac版Android(安卓)Studio常用快
  4. 日新月异的Android新技术
  5. Intent详解
  6. Android(安卓)Studio安装使用教程
  7. Android开发历程_6(RadioButton和CheckBo
  8. Android周学习Step By Step(1)--简单介绍环
  9. Android(安卓)Density(密度)
  10. 糊里糊涂学Android(1)——Activity之间的数