代码之家  ›  专栏  ›  技术社区  ›  Muhammad Hassaan

Android最新设备按钮监听器

  •  1
  • Muhammad Hassaan  · 技术社区  · 6 年前

    我怎样才能得到最近的应用程序Android设备按钮的回叫监听器,就像按后退按钮一样。我试过了 onKeyPress 但它不起作用。后退按钮点击很容易找到,但如何检测最近的按钮点击?

    我尝试了以下和许多其他代码:

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    
        switch (keyCode) {
            case KeyEvent.KEYCODE_A:
            {
                //your Action code
                return true;
            }
        }
    
        return super.onKeyDown(keyCode, event);
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Ahsan Malik    6 年前

    是的,您可以使用 操作关闭系统对话框

    只需使用这个类的一个单独的类名home watcher

       public class HomeWatcher
     {
    static final String TAG = "hg";
    private Context mContext;
    private OnHomePressedListener mListener;
    private InnerReceiver mReceiver;
    
    public HomeWatcher(Context context) {
        mContext = context;
    }
    
    public void setOnHomePressedListener(OnHomePressedListener listener) {
        mListener = listener;
        mReceiver = new InnerReceiver();
    }
    
    public void startWatch() {
        if (mReceiver != null) {
            mContext.registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
        }
    }
    
    public void stopWatch() {
        if (mReceiver != null) {
            mContext.unregisterReceiver(mReceiver);
        }
    }
    
    private class InnerReceiver 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();
                        }
                    }
                }
            }
        }
    
        @Override
        public String toString() {
            return getClass().getSimpleName() + " " + super.toString();
        }
    }
    
    public interface OnHomePressedListener {
        void onHomePressed();
        void onHomeLongPressed();
    }
    

    }

    从需要的类调用函数

     mHomeWatcher = new HomeWatcher(this);
        mHomeWatcher.setOnHomePressedListener(new HomeWatcher.OnHomePressedListener() {
            @Override
            public void onHomePressed() {
                // do something here...
                Log.e("AHSAN", "onHomePressed: ");
    
                proceed();
            }
    
            @Override
            public void onHomeLongPressed() {
                Log.e("AHSAN", "onHomeLongPressed: ");
    
                proceed();
    
            }
    
        2
  •  0
  •   Tiago Ornelas    6 年前

    如果您的意思是“平方”按钮,则不能。只能截取onbackpressed事件。单击主页(圆形)或最近的应用程序(方形)不会触发除OnPause和OnStop以外的任何其他事件。根据活动生命周期

    不触发OnPause和OnStop以外的任何其他事件。根据 Activity lifecycle .

    enter image description here

    推荐文章