我知道主页按钮无法停止或覆盖。有没有一种方法可以扩展主页按钮,然后单击它,我的计数器应该增加而不会干扰主页按钮的任何功能。

最佳答案

尝试以下代码,它可以工作:

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


家庭看守班

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界面

public interface OnHomePressedListener {
    public void onHomePressed();

    public void onHomeLongPressed();
}

10-04 14:09