Как переопределить домашнюю кнопку в android 4.0

Я хочу переопределить домашнюю кнопку в моей активности андроида. Я пробовал несколько вещей, связанных с этим, которые работают на 2.3 и ниже, но не для 4.0 выше

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_HOME) { startActivity(new Intent(this, ActivityB.class)); return true; } return super.onKeyDown(keyCode, event); } 

И другой способ

  @Override public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 

Но это не помогает мне. У кого-нибудь есть идея об этом, пожалуйста, поделитесь информацией

    Я также столкнулся с такой проблемой, и я использую следующий класс для прослушивания события нажатия кнопки home.

     public class HomeWatcher { static final String TAG = "HomeWatcher"; 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); } /** * set the home pressed listener, if set will callback the home pressed * listener's method when home pressed. * * @param listener */ public void setOnHomePressedListener(OnHomePressedListener listener) { mListener = listener; mRecevier = new InnerRecevier(); } /** * start watch */ public void startWatch() { if (mRecevier != null) { mContext.registerReceiver(mRecevier, mFilter); } } /** * stop watch */ 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.i(TAG, "receive 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(); } } } } } } } 

    Используется следующее:

     HomeWatcher mHomeWatcher = new HomeWatcher(Context); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { public void onHomePressed() { //do your somthing... } public void onHomeLongPressed() { } }); mHomeWatcher.startWatch();