android拦截最近的应用程序按钮

ess*_*sse 11 android

我有一个适用于儿童的应用程序,我不希望他们能够单击"最近的应用程序"按钮(看起来像两个矩形的按钮).我正在关注捕获后退按钮和主页按钮,我已经搜索并阅读了很多关于尝试捕获最近的应用程序按钮,但大多数人说你不能或他们这样做的方式是非常值得怀疑的.

应用程序"Kids Place"会弹出一个"不允许操作"的视图,如果您按下"最近使用的应用程序"按钮,则会将您重定向到其主屏幕,即使您在不同的应用程序中,这也有效,那么他们如何做到这一点?

任何建议,提示将不胜感激.

谢谢.

ess*_*sse 20

经过大量搜索和编码后,我发现当前最佳解决方案如下:

   @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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这要求你使用 <uses-permission android:name="android.permission.GET_TASKS" />

当用户按下最近的应用程序按钮时使用此方法时,将导致您的活动将经历活动生命周期,如下所示:onPause - > onWindowFocusChanged - > onResume.

对于用户,出现按下最近的应用程序按钮没有响应的行为.注意:我发现如果您快速按下最近的应用程序按钮,它将在短时间内显示该视图.

这不是最好的解决方案,但它是一个很好的解决方案.如果您有更好的解决方案,请分享.