How to override home button in android 4.0

I want to override the home button in my Android activity. I have tried several things related to this that work on 2.3 and below, but not 4.0 above

@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); } 

and another way

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

But that does not help me. anyone have an idea about this please share information

+6
source share
1 answer

I also encountered such a problem and I am using the following class to listen for the home button click event.

 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 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(); } } } } } } } 

Usage is as follows:

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

All Articles