Back 键的监听
对于 Back 键的监听比较容易, 可以在多个系统回调处拦截, 比如在 activity 的下列方法中都可以收到 Back 键按下的事件:
1 | <span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span><span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>] |
Home 键的广播监听
对于 Home 键的监听不是那么容易, 因为 Home 键可以将程序退出放在后台, 所以这个事件是直接分发给系统, 系统接收到之后做相应处理, Home 键的事件不是直接传递到应用里面. 所以在上述监听 Back 键的代码中, 相应的回调中是收不到 Home 键的事件的.
参考文后的博客链接, 对 Home 键的监听主要通过注册广播接收器实现, 拦截让窗口关闭的系统动作, 然后根据 Intent 里面的具体参数, 分析当前到底是 Home 键, 应用切换键, 还是其他功能按键.
- 接收器实现如下:
1 | package com.mengdd.hellohome; |
注意不同手机的按键不同, 所以需要对不同理由做区分.
Home 键监听广播注册
广播接收器的注册有两种方式
一种是静态注册, 即写在 manifest 里面声明;
另一种是动态注册, 即在 Java 代码里面注册.
上面对 Home 键实现监听的这个 receiver, 静态注册如下:
1 | <receiver android:name="com.mengdd.hellohome.HomeWatcherReceiver" > |
但是发现静态注册不起作用, 即收不到 onReceive 回调.