当前位置: 首页 > 编程笔记 >

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

双志强
2023-03-14
本文向大家介绍Android中监听Home键的4种方法总结,包括了Android中监听Home键的4种方法总结的使用技巧和注意事项,需要的朋友参考一下

昨天需要处理一个问题,需要监听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 解决监听home键的几种方法,包括了Android 解决监听home键的几种方法的使用技巧和注意事项,需要的朋友参考一下 Android 解决监听home键的几种方法 前言: 以下两种方法可以完美解决监听back键,home键,多任务键(最近任务键)。 一、使用注册广播监听home键、多任务键 演示图 创建一个广播代码如下: 在Activity中的onCreate()

  • 本文向大家介绍Android中Home键的监听和拦截示例,包括了Android中Home键的监听和拦截示例的使用技巧和注意事项,需要的朋友参考一下 首先大家应该先了解一种情况,就是Android在应用中是无法拦截Home键的,今天我们带大家看一下Home键的三种情况。 1、在应用中按下Home键的逻辑处理 当我们在应用中按下Home键时界面会启动到桌面,我们在frameworks\base\pol

  • 本文向大家介绍Android中监听未接来电的2种方法,包括了Android中监听未接来电的2种方法的使用技巧和注意事项,需要的朋友参考一下 这里主要是总结一下如何监听有未接来电的问题   1.1 使用广播接收器 BrocastReceiver 实现思路 : 静态注册监听android.intent.action.PHONE_STATE 的广播接收器 当手机的状态改变后将会触发 onReceive.

  • 本文向大家介绍Android监听软键盘弹出与隐藏的两种方法,包括了Android监听软键盘弹出与隐藏的两种方法的使用技巧和注意事项,需要的朋友参考一下 需求: 现在有一个需求是点击一行文本框,弹出一个之前隐藏的输入框,输入完成后按返回键或者其他的东西隐藏键盘和输入框,将输入框的内容填充到文本框中。 实现: 拿到这个需求的第一反应就是写一个监听来监听键盘的显示和隐藏来控制输入框的显示和隐藏,控制文本

  • 本文向大家介绍Android App实现监听软键盘按键的三种方式,包括了Android App实现监听软键盘按键的三种方式的使用技巧和注意事项,需要的朋友参考一下 前言: 我们在Android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“Go”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据

  • 本文向大家介绍vue监听键盘事件的相关总结,包括了vue监听键盘事件的相关总结的使用技巧和注意事项,需要的朋友参考一下 按键修饰符 在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符: 你可以直接将 KeyboardEvent.key 暴露的任意有效按键名转换为 kebab-case 来作为修饰符。 为了在必要的情况下支持旧浏览器,Vue 提供了