亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1330 | 回復(fù): 0
打印 上一主題 下一主題

[Android] Android處理Home鍵方法小結(jié) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-05-26 14:13 |只看該作者 |倒序?yàn)g覽
昨天需要處理一個問題,需要監(jiān)聽home鍵。最開始想到使用onKeydonwn這個方法。但是發(fā)現(xiàn)home不能這樣處理,onKeydonwn可以處理菜單鍵和back鍵,但home不能。因?yàn)閔ome鍵是系統(tǒng)鍵,情況特殊一些。
看了一下網(wǎng)上的資料,說下面的方法可以。(其實(shí)不行)
Java代碼 :
  1. * <a href="http://home.51cto.com/index.php?s=/space/5017954" target="_blank">@Override</a>
  2. 2
  3.     *    public
  4. 3
  5.       void onAttachedToWindow() {  
  6. 4
  7.     *        // TODO Auto-generated method stub
  8. 5
  9.     *        Log.d("aeon","onAttachedToWindow");  
  10. 6
  11.     *        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);   
  12. 7
  13.     *        super.onAttachedToWindow();  
  14. 8
  15.     *    }  
復(fù)制代碼

加了權(quán)限之后也不行。
Xml代碼
  1. # <uses-permission
  2. 2
  3. android:name="android.permission.DISABLE_KEYGUARD"
  4. 3
  5. >
  6. 4
  7. #    </uses-permission>
復(fù)制代碼

實(shí)驗(yàn)幾次之后(android4.1 和android4.2)發(fā)現(xiàn)在單個的activity里面有以下幾個方法可以使用:

方法1:onSaveInstanceState方法
下面這個方法可以處理home的監(jiān)聽問題。
Java代碼
  1. protected
  2. 2
  3. void onSaveInstanceState(Bundle outState)
復(fù)制代碼

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


方法2:onUserLeaveHint方法

Java代碼
  1. <a href="http://home.51cto.com/index.php?s=/space/5017954" target="_blank">@Override</a>
  2. 2
  3.     *     protected
  4. 3
  5.       void onUserLeaveHint() {  
  6. 4
  7.     *         Log.d("aeon","onUserLeaveHint");  
  8. 5
  9.     *         super.onUserLeaveHint();  
  10. 6
  11.     *     }  
復(fù)制代碼


這個方法會在onSaveInstanceState之前執(zhí)行,根據(jù)api的解釋,這個方法還比較合適的。

方法3:ACTION_CLOSE_SYSTEM_DIALOGS

在使用廣播監(jiān)聽方面可以使用ACTION_CLOSE_SYSTEM_DIALOGS
Java代碼
  1. //注冊Receiver
  2. 2
  3.     *
  4. 3

  5. 4
  6.     *               HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver();  
  7. 5
  8.     *              registerReceiver(receiver, new IntentFilter(  
  9. 6
  10.     *                            Intent. ACTION_CLOSE_SYSTEM_DIALOGS));
復(fù)制代碼

方法4:framework PhoneWindowManager.java 處理

想要完全監(jiān)聽home鍵需要在framework層去處理。
/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
里面去修改private void handleLongPressOnHome() 這個方法。

Java代碼
  1. private
  2. 02
  3.       void handleLongPressOnHome() {  
  4. 03
  5.     *         // We can't initialize this in init() since the configuration hasn't been loaded yet.
  6. 04
  7.     *         if (mLongPressOnHomeBehavior < 0) {  
  8. 05
  9.     *             mLongPressOnHomeBehavior  
  10. 06
  11.     *                     = mContext.getResources().getInteger(R.integer.config_longPressOnHomeBehavior);  
  12. 07
  13.     *             if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING ||  
  14. 08
  15.     *                     mLongPressOnHomeBehavior > LONG_PRESS_HOME_RECENT_SYSTEM_UI) {  
  16. 09
  17.     *                 mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING;  
  18. 10
  19.     *             }  
  20. 11
  21.     *         }  
  22. 12
  23.     *
  24. 13

  25. 14
  26.     *         if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) {  
  27. 15
  28.     *             performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);  
  29. 16
  30.     *             sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);  
  31. 17
  32.     *
  33. 18

  34. 19
  35.     *             // Eat the longpress so it won't dismiss the recent apps dialog when
  36. 20
  37.     *             // the user lets go of the home key
  38. 21
  39.     *             mHomeLongPressed = true;  
  40. 22
  41.     *         }  
  42. 23
  43.     *
  44. 24

  45. 25
  46.     *         if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_DIALOG) {  
  47. 26
  48.     *             showOrHideRecentAppsDialog(RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS);  
  49. 27
  50.     *         } else
  51. 28
  52.       if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {  
  53. 29
  54.     *             try {  
  55. 30
  56.     *                 IStatusBarService statusbar = getStatusBarService();  
  57. 31
  58.     *                 if (statusbar != null) {  
  59. 32
  60.     *                     statusbar.toggleRecentApps();  
  61. 33
  62.     *                 }  
  63. 34
  64.     *             } catch (RemoteException e) {  
  65. 35
  66.     *                 Slog.e(TAG, "RemoteException when showing recent apps", e);  
  67. 36
  68.     *                 // re-acquire status bar service next time it is needed.
  69. 37
  70.     *                 mStatusBarService = null;  
  71. 38
  72.     *             }  
  73. 39
  74.     *         }  
  75. 40
  76.     *     }  
復(fù)制代碼

只要把handleLongPressOnHome里面做出相對應(yīng)的處理就ok
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP