android intercept recent apps button

前端 未结 5 921
暖寄归人
暖寄归人 2020-12-01 07:09

I have an application meant for children and I do not want them to be able to click the \"Recent Apps\" button (the one that looks like two rectangles on top of each other).

5条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-01 07:36

    After lots of searching and coding the current best solution I found is the following:

       @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    
        if (!hasFocus) {
            windowCloseHandler.postDelayed(windowCloserRunnable, 0);
        }
    }
    
    private void toggleRecents() {
        Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");
        closeRecents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        ComponentName recents = new ComponentName("com.android.systemui", "com.android.systemui.recent.RecentsActivity");
        closeRecents.setComponent(recents);
        this.startActivity(closeRecents);
    }
    
    private Handler windowCloseHandler = new Handler();
    private Runnable windowCloserRunnable = new Runnable() {
        @Override
        public void run() {
            ActivityManager am = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
            ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
    
            if (cn != null && cn.getClassName().equals("com.android.systemui.recent.RecentsActivity")) {
                toggleRecents();
            }
        }
    }
    

    This requires that you use

    When using this approach when the user presses the recent apps button it will cause your activity will go through the activity lifecycle as follows: onPause -> onWindowFocusChanged -> onResume.

    To the user the behavior appears that pressing the recent apps button has no response. NOTE: that I have found that if you press the recent apps button quickly it will display that view for brief time.

    This is not the best solution, but it is a stab at it. If you have a better solution please share.

提交回复
热议问题