javaandroidandroid-recents

Android recent device button Listener


How can I get a call back listener for the recent Apps Android device button, just like the Back Button press. I've tried onKeyPress events but it did not work. Back button clicks can be easily found, but how do I detect a recent button click?

I tried following and many other codes:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}

Solution

  • yes you can get recent button call back by using the Action_Close_System_Dialog

    just use this class a separated class name 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();
    }
    

    }

    call the function from the class you need it

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