Search code examples
androidandroid-homebutton

Can we add a counter when home button is clicked in android?


I know that home button cannot be stopped or override. Is there a way to extend the home button in a way then when it is click, my counter should be increasing without disturbing any functionality of the home button.


Solution

  • Try the following code, it works:

    HomeWatcher mHomeWatcher = new HomeWatcher(this);
    mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
        @Override
        public void onHomePressed() {
            // do something here...
        }
        @Override
        public void onHomeLongPressed() {
        }
    });
    mHomeWatcher.startWatch();
    

    HomeWatcher Class

    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";
    
           @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)) {
                               mListener.onHomePressed();
                           } else if    (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                               mListener.onHomeLongPressed();
                           }
                       }
                   }
               }
           }
       }
    }
    

    OnHomePressed Interface

    public interface OnHomePressedListener {
        public void onHomePressed();
    
        public void onHomeLongPressed();
    }