Android中监听Home键的4种方法总结

本文主要介绍了Android中监听Home键的4种方法总结,主要讲解了onSaveInstanceState方法、onUserLeaveHint方法、ACTION_CLOSE_SYSTEM_DIALOGS、framework PhoneWindowManager.java等4种方法,需要的朋友可以参考下:

因为home键是系统键,情况特殊一些。看了一下网上的资料,说下面的方法可以。(其实不行)

代码如下:
@Override
public void onAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}

加了权限之后也不行。
复制代码 代码如下:

< uses-permission android:name=“android.permission.DISABLE_KEYGUARD” >

ok~ 下面来说下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;  
        }  
    }  
} 

你可能感兴趣的:(技术总结,android,Home键监听)