最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中監(jiān)聽Home鍵的4種方法總結

 更新時間:2015年04月24日 10:00:21   投稿:junjie  
這篇文章主要介紹了Android中監(jiān)聽Home鍵的4種方法總結,本文講解了onSaveInstanceState方法、onUserLeaveHint方法、ACTION_CLOSE_SYSTEM_DIALOGS、framework PhoneWindowManager.java等4種方法,需要的朋友可以參考下

昨天需要處理一個問題,需要監(jiān)聽home鍵。最開始想到使用onKeydonwn這個方法。但是發(fā)現(xiàn)home不能這樣處理,onKeydonwn可以處理菜單鍵和back鍵,但home不能。因為home鍵是系統(tǒng)鍵,情況特殊一些。
看了一下網上的資料,說下面的方法可以。(其實不行)

復制代碼 代碼如下:

@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)發(fā)現(xiàn)在單個的activity里面有以下幾個方法可以使用:
 
方法1:onSaveInstanceState方法
  下面這個方法可以處理home的監(jiān)聽問題。
復制代碼 代碼如下:

protected void onSaveInstanceState(Bundle outState) 

但這個方法不是很好,不推薦

方法2:onUserLeaveHint方法
 

復制代碼 代碼如下:

@Override 
    protected void onUserLeaveHint() { 
        Log.d("aeon","onUserLeaveHint"); 
        super.onUserLeaveHint(); 
    } 
 
這個方法會在onSaveInstanceState之前執(zhí)行,根據(jù)api的解釋,這個方法還比較合適的。
 
方法3:ACTION_CLOSE_SYSTEM_DIALOGS
 
在使用廣播監(jiān)聽方面可以使用ACTION_CLOSE_SYSTEM_DIALOGS
復制代碼 代碼如下:

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

方法4:framework PhoneWindowManager.java 處理
 
想要完全監(jiān)聽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

相關文章

最新評論

新建县| 黑龙江省| 南康市| 调兵山市| 常山县| 衡南县| 天门市| 加查县| 新巴尔虎右旗| 永清县| 龙井市| 崇左市| 额敏县| 陇西县| 麻阳| 舒兰市| 策勒县| 左贡县| 陆良县| 永修县| 义乌市| 天峻县| 谢通门县| 柘城县| 枞阳县| 深水埗区| 炉霍县| 铜鼓县| 长垣县| 同德县| 高阳县| 阳西县| 旅游| 上犹县| 文山县| 浪卡子县| 抚州市| 盈江县| 抚宁县| 嘉善县| 乐山市|