Android项目开发中如何处理Home键

Android项目开发中经常需要处理Home键,home键在应用层是无法捕捉也是不应该捕捉的。每层都有每层具体的分工。

一般项目要求我们对Home键要做处理,而我们又无法在应用层捕捉到这个按键操作。

1. 如果你只是想屏蔽 home 键,让它无所作为,那么祝贺你,你是可以做到的

常用方法:

private boolean catchHomeKey = true;
@Override
public void onAttachedToWindow() {
// TODO Auto-generated method stub
if(catchHomeKey) {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); //bug的缘由
}
super.onAttachedToWindow();
}

这样就可以做到完全屏幕了,

当然你如果想通过 :

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}
if(keyCode == KeyEvent.KEYCODE_HOME) {
System.out.println("----- !!! I am home !!!! ----");
//写你的处理逻辑 (htc g8 2.1系统可以到达这里,2.2以上的就不可以到达这里)
}

return super.onKeyDown(keyCode, event);
}

这种方法来监听它,那么你是做不到的!而且这将会带来另一个问题,你的全屏设置失效了,试试,按一下电源键,让手机黑屏,再按一下进去,你会发现标题栏不会自动消失!


所以可以总结出:要想全屏,那么上面的home键处理方法是不能采用的!



2.如果你想在用户按下Home键的时候,自己的应用有所作为,那也是可以做到的!

我们其实只是需要知道“用户什么时候按下Home键?”,当你知道用户按下之后 ,你就可以做一些这时候你应该做的事情。那么,如何知道用户什么时候按下Home键???


换一种思维方式,答案很简单,监听logcat日志,看到有

I/ActivityManager( 144): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher } from pid 144


这样的输出信息,你就可以知道用户按下了Home键,你在程序中可以监听logcat,当发现用户的这一操作时,你就可以暂停背景音乐(做一些你应该做的事情)。然后当用户再一次打开app的时候,logcat一般会输出:


11-04 10:17:38.427: INFO/ActivityManager(144): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.XXX.XXXX/.activity.WelcomeActivity bnds=[12,76][132,211] } from pid 237


然后你就可以再次播放音乐了!(哈哈,太好了,终于成功了)

注意:在删选logcat日志的时候,你要应该过滤,使用 tag , pid,项目名,这些有效信息来快速过滤。


具体操作方法看雨松MOMO的文章Android软件开发之在程序中时时获取logcat日志信息

--------- 实现方法很简单哟!!!

参考资料:

http://blog.csdn.net/xys289187120/article/details/6765046



----------补充说明:

在模拟器上,输出的日志格式略有不同,不知道是不是每一部器机输出格式是不是都有一些差别:

11-04 14:07:22.156: INFO/ActivityManager(59):Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher }


11-04 14:17:38.256: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.ceosoftcenters.healyourbody/.activity.WelcomeActivity }


注意模拟器中输出是 : Starting activity: Intent不再是Starting: Intent ,所以在模拟器上运行不成功




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值