昨天需要处理一个问题,需要监听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中启动一个Activity如果点击Home键该Activity是不会被销毁的,但是当进行某些操作时某些数据就会丢失,如下: Java class: package com.king.activitytest2; import android.support.v7.app....
#### 四、小结 通过以上步骤,您已经成功地在电脑上安装了Android 4.0模拟器。该模拟器不仅能够帮助开发者进行应用程序的开发与测试,同时也能够让普通用户提前体验到这一版本带来的新功能和改进。尽管Android 4.0...
### 小结 总之,Android SDK下载安装及配置是一个相对复杂的步骤,它需要开发者了解Java开发环境的搭建,并且在搭建Android开发环境时可能会遇到网络访问限制的问题。整个配置过程需要细心和耐心,但通过正确的方法...
Android编程实用技术小结涵盖了几个关键的Android开发知识点,主要包括开机启动BroadcastReceiver、Service的使用以及AlarmManager的管理。以下是对这些技术的详细说明: 1. **开机启动Receiver**: 开机启动...
4. **android:configChanges**:指定哪些配置变化会导致Activity的`onConfigurationChanged()`方法被调用,如屏幕方向、导航方式或语言更改等。如果不想因为配置改变而重新创建Activity,可以手动处理这些变化。 5....
八、小结 Android GPS 架构中的 GPS 开启与关闭需要了解普通应用程序启动 GPS 设备的代码实现、Settings.Secure.setLocationProviderEnabled 的调用过程、数据库写入过程、Android 启动过程等相关知识点。只有掌握...
1.6 本章小结 6 第2章 工欲善其事 必先利其器——搭建Android开发环境 7 2.1 开发Android应用前的准备 7 2.1.1 Android开发系统要求 7 2.1.2 Android软件开发包 7 .2.1.3 其他注意事项 8 2.2 ...
在Android平台上,分享微信小程序可能遇到一些挑战,但只要遵循正确的步骤和注意事项,这些问题是可以解决的。本文将针对“Android分享微信小程序失败”的常见问题进行分析,并提供解决方案。 首先,集成微信小程序...
小结 本文详细介绍了 Android 获取与设置系统环境变量的方法指南,包括在 Android 源码环境下增加环境变量和在 Android 终端下查看和修改环境变量。学会了这些方法,我们就可以在分析 Android 源码中通过 adb 命令...
#### 五、小结 通过上述步骤,你可以成功地搭建起一个基本的Android开发环境,并能够创建和管理虚拟设备。这将为后续的Android应用开发奠定坚实的基础。随着技术的发展,建议关注最新的开发工具和技术栈,以便更好...
#### 七、小结 通过上述步骤,您已经成功配置了一个基本的Android开发环境。接下来可以进一步学习Android编程的基础知识,开始开发自己的Android应用程序。此外,还可以考虑使用其他先进的开发工具,如Android ...
#### 七、小结 通过以上步骤,您已经成功地在Windows环境下搭建了一个完整的Android 2.2开发环境,并运行了第一个Android应用程序。接下来,您可以进一步探索Android SDK提供的更多示例和文档,加深对Android开发的...
#### 小结 通过上述步骤,初学者可以顺利地搭建起一套完整的Android开发环境。这一系列的操作不仅包括了软件的安装,还涉及到了环境变量的配置,以及虚拟设备的创建。对于初学者来说,这些步骤可能会有些繁琐,但是...
小结 本文档提供了一个详细的教程,指导读者从零开始编译Android源码。编译Android源码需要具备一定的编程基础和Linux操作系统的使用经验。同时,需要正确地设置环境变量和安装Java环境。只有具备了这些环境,才能...
gradle.user.home=D\:\\Android\\.gradle 但这种方法,需要每个项目文件都要改一遍,如果只是临时修改,可以采用这种方法,如果是针对所有项目的,不建议这种方法. 方法二,在Android Studio中修改gradle用户目录,...