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 ,所以在模拟器上运行不成功




更多相关文章

  1. Android(安卓)组件系列 -- Activity 启动流程(9.0)
  2. Android(安卓)7.0新特性总结
  3. Android(安卓)TextView中字体行间距的设置
  4. 为什么我要改用Kotlin
  5. android中ContentProvider学习心得
  6. Android使用http协议与服务器通信的实例
  7. Android(安卓)调用网易微博开放API
  8. Android(安卓)Paint的使用以及方法介绍(附源码下载)
  9. 【Android】JSON数据的读写方法

随机推荐

  1. android 关闭外音
  2. Android 之使用LocalBroadcastManager解
  3. Android检测系统中是否存在某进程
  4. 分享:android之hardwareAccelerated你不知
  5. android   点击屏幕让软件盘消失
  6. Android xmpp 资源列表
  7. Android 之如何删除eclipse自动生成的//T
  8. android - Jni 接口函数表
  9. 彻底解决android读取txt乱码终极方案
  10. Android获得手机分辨率