监听HOME键

来源:互联网 发布:模拟器无法连接网络 编辑:程序博客网 时间:2024/05/17 04:17

刚开始,因为监听手机的back键是有一个简单判断方法,所以第一反应觉得home应该也一样,if (keyCode == KeyEvent.KEYCODE_HOME && event.getRepeatCount() == 0){// do sth}。但测试下来发现home键可不是那么回事儿,监听不到。网友说这个和SDK有关系。那有没有不依赖sdk的方法呢。这个是可以有滴。自己写两个监听类,然后在Activity中注册以下home的监听广播。DEMO如下:

一、定义接口OnHomePressedListener。抽象方法是home被按下后的回调方法

package country.company.project.util;public interface OnHomePressedListener {public void onHomePressed();public void onHomeLongPressed();}

二、定义监听类HomeWatcher。

package country.company.project.util;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.util.Log;public class HomeWatcher {static final String TAG = "hg";private Context mContext;private IntentFilter mFilter;private OnHomePressedListener mListener;private InnerRecevier mRecevier;public HomeWatcher(Context context) {mContext = context;mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);}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";@Overridepublic 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的onCreate()或者其它你需要的地方注册监听器

package country.company.project.util;import android.app.Activity;import android.os.Bundle;import android.util.Log;import country.company.project.util.R;public class HomeWatcherActivity extends Activity {private final String TAG = "hg";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.about);HomeWatcher mHomeWatcher = new HomeWatcher(this);mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {@Overridepublic void onHomePressed() {Log.e(TAG, "onHomePressed");}@Overridepublic void onHomeLongPressed() {Log.e(TAG, "onHomeLongPressed");}});mHomeWatcher.startWatch();}}


各种版本SDK实测OK!

原创粉丝点击