源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-09-29 08:36 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android中监听Home键的4种方法总结
昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,说下面的方法可以。(其实不行)
[u]复制代码[/u] 代码如下:
@Override     public void onAttachedToWindow() {         // TODO Auto-generated method stub         Log.d("aeon","onAttachedToWindow");         this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);          super.onAttachedToWindow();     } 
加了权限之后也不行。
[u]复制代码[/u] 代码如下:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" >     </uses-permission> 
  实验几次之后(android4.1 和android4.2)发现在单个的activity里面有以下几个方法可以使用:   [b]方法1:onSaveInstanceState方法[/b]   下面这个方法可以处理home的监听问题。
[u]复制代码[/u] 代码如下:
protected void onSaveInstanceState(Bundle outState) 
但这个方法不是很好,不推荐 [b]方法2:onUserLeaveHint方法[/b]  
[u]复制代码[/u] 代码如下:
@Override      protected void onUserLeaveHint() {          Log.d("aeon","onUserLeaveHint");          super.onUserLeaveHint();      } 
  这个方法会在onSaveInstanceState之前执行,根据api的解释,这个方法还比较合适的。   [b]方法3:ACTION_CLOSE_SYSTEM_DIALOGS[/b]   在使用广播监听方面可以使用ACTION_CLOSE_SYSTEM_DIALOGS
[u]复制代码[/u] 代码如下:
//注册Receiver                   HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver();               registerReceiver(receiver, new IntentFilter(                             Intent. ACTION_CLOSE_SYSTEM_DIALOGS)); 
[b]方法4:framework PhoneWindowManager.java 处理[/b]   想要完全监听home键需要在framework层去处理。 /frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 里面去修改private void handleLongPressOnHome() 这个方法。  
[u]复制代码[/u] 代码如下:
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
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部