安卓Home键封装监听
来源:互联网 发布:海美迪h7二代刷阿里云 编辑:程序博客网 时间:2024/05/17 22:56
众所周知,我们监听返回键事件,无法是下面两个方法:
- @Override
- public void onBackPressed() {
- //do something
- //super.onBackPressed();
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(keyCode == KeyEvent.KEYCODE_BACK){
- //do something
- }
- return super.onKeyDown(keyCode, event);
- }
于是乎,我们理所当然的想到,监听Home键的方法是:if(keyCode == KeyEvent.KEYCODE_HOME)。但实际上,这样是行不通的,因为此时home键的消息在framework层就已经被拦截,所以,我们在应用中通过此方法是无法监听到Home键的消息的。那么我们如何捕获Home键事件,并作出相应处理呢?其实系统还是给我们发出广播的,下面,就跟大家分享一下,封装好了的监听Home键的方法:
HomeWatcher类:
- /**
- * Home键监听封装
- *
- * @author way
- *
- */
- public class HomeWatcher {
- static final String TAG = "HomeWatcher";
- private Context mContext;
- private IntentFilter mFilter;
- private OnHomePressedListener mListener;
- private InnerRecevier mRecevier;
- // 回调接口
- public interface OnHomePressedListener {
- public void onHomePressed();
- public void onHomeLongPressed();
- }
- public HomeWatcher(Context context) {
- mContext = context;
- mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
- }
- /**
- * 设置监听
- *
- * @param listener
- */
- public void setOnHomePressedListener(OnHomePressedListener listener) {
- mListener = listener;
- mRecevier = new InnerRecevier();
- }
- /**
- * 开始监听,注册广播
- */
- public void startWatch() {
- if (mRecevier != null) {
- mContext.registerReceiver(mRecevier, mFilter);
- }
- }
- /**
- * 停止监听,注销广播
- */
- public void stopWatch() {
- if (mRecevier != null) {
- mContext.unregisterReceiver(mRecevier);
- }
- }
- /**
- * 广播接收者
- */
- class InnerRecevier extends BroadcastReceiver {
- final String SYSTEM_DIALOG_REASON_KEY = "reason";
- final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
- final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
- final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
- String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
- if (reason != null) {
- Log.e(TAG, "action:" + action + ",reason:" + reason);
- if (mListener != null) {
- if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
- // 短按home键
- mListener.onHomePressed();
- } else if (reason
- .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
- // 长按home键
- mListener.onHomeLongPressed();
- }
- }
- }
- }
- }
- }
- }
接下来,我们需要在应用中开启监听,下面是以在Activity中的应用为例:
- /**
- * 应用HomeWatcher小例
- *
- * @author way
- *
- */
- public class MainActivity extends Activity {
- private static final String TAG = "MainActivity";
- private HomeWatcher mHomeWatcher;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mHomeWatcher = new HomeWatcher(this);
- mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
- @Override
- public void onHomePressed() {
- Log.e(TAG, "onHomePressed");
- }
- @Override
- public void onHomeLongPressed() {
- Log.e(TAG, "onHomeLongPressed");
- }
- });
- mHomeWatcher.startWatch();
- }
- @Override
- protected void onPause() {
- super.onPause();
- mHomeWatcher.stopWatch();// 在onPause中停止监听,不然会报错的。
- }
- }
0 0
- 安卓Home键封装监听
- 安卓-监听home键
- android Home键监听封装
- 安卓开发教你监听手机Home键
- Android之Home键监听封装
- Android之Home键监听封装
- Android之Home键监听封装
- Android之Home键监听封装
- Android之Home键监听封装
- 安卓之关于监听home键返回桌面的总结
- 安卓屏蔽home键
- 安卓 屏蔽home键
- Android_监听Home按键的封装
- home键监听
- home键监听
- 监听home键
- home键监听
- home键监听
- 5 shell命令之tr
- 用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(8):总结和对以后版本的展望
- 你若离去 在最美的风景里等你
- 关于图片字体化
- 安卓Home键封装监听
- 使用VIEW_MAINTENANCE_CALL创建表维护程序
- Windows 内存管理方法(二)
- 线性规划
- GLIBCXX_DEBUG开启STL检测功能
- 关于Android中使用Uri监听数据库的变化
- 【原创】Go语言/Golang 知识简单集锦
- 排序算法之 归并排序 及其时间复杂度和空间复杂度
- Python--ZOJ1337