您的位置:首页 > 移动开发 > Android开发

Android Home键监听

2016-08-19 18:48 232 查看
如何捕获Home键事件,并作出相应处理呢?其实系统还是给我们发出广播的,下面是封装好了的监听Home键的方法:

/** 

 * 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");  

            }  

        });  

        

    }  

  @Override 

 protected void onResume() {  

        super.onPause();  

     mHomeWatcher.startWatch();// 在onResume中开始监听,

    }  

  

    @Override  

    protected void onPause() {  

        super.onPause();  

        mHomeWatcher.stopWatch();// 在onPause中停止监听,不然会报错的。(实际注销广播)

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: