一监听返回键或者菜单键的情况比较多,但也不排除有监听home键的需求啊。

监听返回键或者菜单键,可以通过重写activity的dispatchKeyEvent方法,判断event对象的KeyCode值来实现。

虽然android提供了一个常量KeyEvent.KEYCODE_HOME,让我们以为可以监听home键,但其实是不行的。

可以换个思路来做监听。我们知道,当点击了home键必然会调用activity生命周期的onStop()方法,但是调用了finish()方法或者被其他activity完全遮盖了,也会调用onStop()方法。那么只要我们能把后面两种情况区分出来,那么剩下的情况就是调用home键,对吧。

1.区分是否调用了finish()方法,这个好办,只要重写finish()方法,增加一个标记位即可

@Overridepublic void finish() {// TODO Auto-generated method stubsuper.finish();isActivityFinished=true;}

2.区分是否被其他activity完全遮盖。有被桌面应用、自己应用的activity以及别的应用activity覆盖三种情况,那么重写onStop()方法吧

@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();if(!isActivityFinished){//没有销毁activityActivityManager am=(ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);List<RunningTaskInfo> infoList=am.getRunningTasks(1);if(infoList.get(0).topActivity.getPackageName().startWith("com.android.launcher")){Log.i("aaa", "点了home..................");}else{Log.i("aaa", "没点home..................");}}else{Log.i("aaa", "没点home..................");}}
主要是判断覆盖在该activity上的activity是否属于桌面应用,如果是,则点击了home键,否则,则没有点击。

不同的手机厂商对于桌面应用有不同的命名(这也跟api不一样有关),存在com.android.launcher,com.android.launcher2,com.android.launcher3这几种情况,但都是以com.android.launcher开头的,所以在判断的时候直接判断栈顶的activity包名是否以com.android.launcher开头即可。

但也有非常特殊的情况,例如一些厂商深度定制,把包名都完全改了。例如华为某平板的桌面包名就是com.huawei.android.launcher,那么这种特殊情况以上方法就不适应咯。


以上方法是在api 19环境下验证的。多谢。

作者:ben0612 发表于2015/3/24 17:11:47 原文链接 阅读:17 评论:0 查看评论

更多相关文章

  1. Android笔记---四大组件之Content Provider内容提供者详解
  2. Unreal Engine 4,安装CodeWorksforAndroid时,下载组件失败的解决方
  3. 为什么Android的Adapter中,bindview被调用了多次
  4. Android(安卓)6.0(API 23)及以上动态权限申请的方法
  5. Android(安卓)使用 DownloadManager 管理系统下载任务的方法
  6. Android(安卓)常见面试题
  7. JNI笔记 : 数据类型、JNI函数与签名
  8. frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解
  9. (zz)android HAL实例解析

随机推荐

  1. android tab上显示数字
  2. Android 系统广播机制
  3. [置顶] android应用框架系列三,兼容性
  4. Android获取WIFI状态下的IP地址以及MAC地
  5. android 环境变量搭建
  6. android 内存使用
  7. android studio下ndk开发
  8. android sdk api的层次结构
  9. Android Things之---Android Things专题
  10. 一行命令得到签名SHA1(Android Studio)