当前位置:操作系统 > 安卓/Android >>

Android之Home键监听封装

众所周知,我们监听返回键事件,无法是下面两个方法:[java] view plaincopyprint?
@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); 
    } 

@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类:

 

[java]
/**
 * 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(); 
                        } 
                    } 
                } 
补充:移动开发 , Android ,

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,