博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】Android处理Home键方法小结
阅读量:6137 次
发布时间:2019-06-21

本文共 2535 字,大约阅读时间需要 8 分钟。

实验几次之后(android4.1 和android4.2)发现在单个的activity里面有以下几个方法可以使用:

 

方法1:onSaveInstanceState方法

  下面这个方法可以处理home的监听问题。

Java代码  
protected void onSaveInstanceState(Bundle outState)

  但这个方法不是很好,不推荐

 

方法2:onUserLeaveHint方法

 

Java代码  

  

@Override    protected void onUserLeaveHint() {        Log.d("aeon","onUserLeaveHint");        super.onUserLeaveHint();    }

 

这个方法会在onSaveInstanceState之前执行,根据api的解释,这个方法还比较合适的。

 

方法3:ACTION_CLOSE_SYSTEM_DIALOGS

 

在使用广播监听方面可以使用ACTION_CLOSE_SYSTEM_DIALOGS

 

 

Java代码  

  

//注册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() 这个方法。

 

Java代码  
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

转载地址:http://hnkya.baihongyu.com/

你可能感兴趣的文章
impdp expdp nls_lang字符集设置
查看>>
php安装扩展错误:Cannot find config.m4
查看>>
一个综合的分布式项目之性能测试
查看>>
Laravel4 控制器放到子文件夹
查看>>
2015.3.27 Linux文档的压缩和打包
查看>>
自定义的python目录和文件 import 找不到路径的解决办法
查看>>
[Swift]UIKit学习之UILabel的用法
查看>>
zabbix 基本键值
查看>>
我的友情链接
查看>>
JQuery的Ajax跨域请求的解决方案
查看>>
Android 屏幕适配总结
查看>>
1.1错误处理
查看>>
Nginx的proxy_cache_path
查看>>
[TIA] self developer tools
查看>>
python的class里面的function怎么被调用
查看>>
fusionCharts 不能显示的原因
查看>>
解决chosen-select动态加载数据不生效的问题
查看>>
浮躁的心态
查看>>
注册表注册安装程序备忘
查看>>
在Mac上显示iPhone界面
查看>>