Android中监听Home键的4种方法总结
来源:互联网 发布:linux smp lock.h 编辑:程序博客网 时间:2024/06/07 00:15
http://www.jb51.net/article/64779.htm
这篇文章主要介绍了Android中监听Home键的4种方法总结,本文讲解了onSaveInstanceState方法、onUserLeaveHint方法、ACTION_CLOSE_SYSTEM_DIALOGS、framework PhoneWindowManager.java等4种方法,需要的朋友可以参考下
<iframe id="cproIframe_u2261530_2" width="680" height="200" src="http://pos.baidu.com/acom?adn=3&adp=1&at=0&aurl=&c01=1&cad=1&ccd=24&cec=GBK&cfv=17&ch=0&col=en-US&conBW=1&conOP=1&cpa=1&cpro_lu=1%2C%23dfe4f9%2C%23000000%2C%E5%AE%8B%E4%BD%93&dai=2&dis=0&layout_filter=image&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DK_w5knVGT0OVvo9bXPtqR-Q8Kdh6VAKVxlI3WeAGV8NBc8A6WD4kZ2RmMBjvb1LV%26wd%3D%26eqid%3Db1bf98e5000155a20000000356667a8f&ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F64779.htm&lu_161=0&lunum=6&n=jb51_cpr&pat=6&pcs=1855x969&pih=0&pis=10000x10000&piw=0&ps=535x432&psr=1920x1080&pss=1855x541&ptbg=90&ptp=0&ptt=0&qn=4c6003fba3184946&rad=&rsi0=680&rsi1=200&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%23000000&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=tabcloud_skin_5&stid=5&td_id=2261530&titFF=%25E5%25BE%25AE%25E8%25BD%25AF%25E9%259B%2585%25E9%25BB%2591&titFS=14&titSU=0&titTA=left&tn=baiduCustNativeAD&tpr=1449556633275&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u2261530&ti=Android%E4%B8%AD%E7%9B%91%E5%90%ACHome%E9%94%AE%E7%9A%844%E7%A7%8D%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93_Android_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&tt=1449556633249.103.124.125" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="display: block;"></iframe>
昨天需要处理一个问题,需要监听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
0 0
- Android中监听Home键的4种方法总结
- Android中监听Home键的4种方法总结
- Android中监听Home键的4种方法总结
- android监听home键的方法
- Android监听home键的方法
- Android系统中home键的监听
- Android开发——Home键监听方法总结
- Android中home键监听一个好用的方法。(按home键后播放器停止播放)
- 监听android的Home键
- android Home键的监听
- 监听android的home键
- android Home键的监听
- Android监听HOME键的最简单的方法
- Android监听HOME键的另外一种方法
- Android中home键和电源键的监听
- Android中对menu、home、back键的监听
- Android中对menu、home、back键的监听
- Android中对menu、home、back键的监听
- Android硬件加速
- Swap Nodes in Pairs
- react native 热潮
- 6大设计原则(六)---开闭原则。
- [iOS] iOS开发的22个奇葩技巧
- Android中监听Home键的4种方法总结
- Error retrieving parent for item: No resource found that matches the given name 'android:TextAppeara
- XSS的常见变换
- 验证注册表单
- jenkins中svn publisher插件使用
- ReactJS修炼之路(一)
- MP3的ID3解析
- Android SharedPreferences使用以及原理详解
- DOS_OBJECT_USE_OBJC