android监听Home键

40 篇文章 0 订阅
10 篇文章 0 订阅

将到Android中Home键的监听,很多人第一反应时重写相应Activity的onKeyDown()方法,监听当按下的键的keyCode为KEYCODE_HOME时,进行自己的相应的处理。如:


    @Override    
    public boolean onKeyDown(int keyCode, KeyEvent event) {    
        if (keyCode == KeyEvent.KEYCODE_HOME) {    
            stopService(mIntentService);    
            return true;    
        }    
        return super.onKeyDown(keyCode, event);    
    }  

但是这样的监听是不能监听到HOME键的。这样的方法只能监听到BACK,MENU键。那么怎么监听Home键了?

1.新建一个监听Home键的Listener

    public class HomeListener {    
        static final String TAG = "HomeListener";     
        private Context mContext;     
        private IntentFilter mFilter;     
        private OnHomePressedListener mListener;     
        private InnerRecevier mRecevier;     
         
        // 回调接口      
        public interface OnHomePressedListener {     
            public void onHomePressed();     
         
            public void onHomeLongPressed();     
        }     
         
        public HomeListener(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();     
                            }     
                        }     
                    }     
                }     
            }     
        }     
    }    

2.在使用的类的onCreate方法中注册Home键的监听

    /**  
         * 注册Home键的监听  
         */    
        private void registerHomeListener() {    
            mHomeWatcher = new HomeListener(this);     
            mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {    
                    
                @Override    
                public void onHomePressed() {    
                    //TODO 进行点击Home键的处理    
                    Log.i("xsl", "0000000000000");    
                    stopService(mIntentService);    
                }    
                    
                @Override    
                public void onHomeLongPressed() {    
                    //TODO 进行长按Home键的处理    
                    Log.i("xsl", "0000000000000");    
                }    
            });    
            mHomeWatcher.startWatch();    
        }    

3.在使用的类的onPause方法中停止监听

mHomeWatcher.stopWatch();    




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值