【Android】Android處理Home鍵方法小結


實驗幾次之后(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:framework PhoneWindowManager.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM