美文网首页
Android监听Home键

Android监听Home键

作者: Topone | 来源:发表于2021-09-03 14:39 被阅读0次
    package com.lenovo.styluspen.utils;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    
    public class HomeWatcherUtils{
    
        private 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) {
                        LogUtils.i("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();
                            }
                        }
                    }
                }
            }
        }
    }
    

    调用时注意:

    在初始化调用(如onCreate)时添加如下代码:

    HomeWatcher mHomeWatcher = new HomeWatcher(this); 
            mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener(){ 
                @Override 
                public void onHomePressed()  { 
                    //按了HOME键 
                } 
                @Override 
                public void onHomeLongPressed(){ 
                    //长按HOME键
                } 
            }); 
            mHomeWatcher.startWatch();
    

    在程序销毁时(如:onDestroy)时添加如下代码:

    if(mHomeWatcher != null)
            mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。 
    

    相关文章

      网友评论

          本文标题:Android监听Home键

          本文链接:https://www.haomeiwen.com/subject/rprkwltx.html