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

所属分类: 软件编程 / Android 阅读数: 968
收藏 0 赞 0 分享

昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。
看了一下网上的资料,说下面的方法可以。(其实不行)

复制代码 代码如下:

@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)发现在单个的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; 
            } 
        } 
    } 

只要把handleLongPressOnHome里面做出相对应的处理就ok

更多精彩内容其他人还在看

Android样式和主题之选择器的实例讲解

今天小编就为大家分享一篇关于Android样式和主题之选择器的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Android应用动态修改主题的方法示例

今天小编就为大家分享一篇关于Android应用动态修改主题的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter 网络请求框架封装详解

这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Flutter倒计时/计时器的实现代码

这篇文章主要介绍了Flutter倒计时/计时器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android使用google breakpad捕获分析native cash

这篇文章主要介绍了Android使用google breakpad捕获分析native cash 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Flutter WebView与JS互相调用简易指南

这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android开发实现ListView和adapter配合显示图片和文字列表功能示例

这篇文章主要介绍了Android开发实现ListView和adapter配合显示图片和文字列表功能,涉及Android使用ListView结合adapter适配器实现图文显示功能相关的布局、解析、权限控制等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android文字基线Baseline算法的使用讲解

今天小编就为大家分享一篇关于Android文字基线Baseline算法的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter自定义实现神奇动效的卡片切换视图的示例代码

这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现自定义滑动刻度尺方法示例

这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多