Java 当应用程序';它在任务管理器中

Java 当应用程序';它在任务管理器中,java,android,libgdx,pause,Java,Android,Libgdx,Pause,我用Java和LibGdx做了一个游戏 这是一个有时间限制的技能游戏,问题是玩家可以按home按钮暂停应用程序,然后转到task manager,并且可以查看应用程序的预览,在不计算时间的情况下查找他必须查找的内容 因此,我想在玩家按下home按钮暂停时隐藏应用程序的预览 我想做什么 我覆盖暂停和恢复处理程序 @Override public void pause() { Gdx.app.log("LibGDX", "pause"); state = State.PAUSE;

我用Java和LibGdx做了一个游戏

这是一个有时间限制的技能游戏,问题是玩家可以按home按钮暂停应用程序,然后转到task manager,并且可以查看应用程序的预览,在不计算时间的情况下查找他必须查找的内容

因此,我想在玩家按下home按钮暂停时隐藏应用程序的预览

我想做什么 我覆盖暂停和恢复处理程序

@Override
public void pause() {
    Gdx.app.log("LibGDX", "pause");
    state = State.PAUSE;

    Gdx.graphics.setContinuousRendering(false);
    Gdx.graphics.requestRendering();
}

@Override
public void resume() {
    Gdx.app.log("LibGDX", "resume");
    state = State.RUN;
    Gdx.graphics.setContinuousRendering(true);
}
以及my
public void render(float)
函数的主要部分

    switch (state)
    {
        case RUN:
            // game
            break;
        case PAUSE:
            // a black rectangle on screen
            shapeRenderer.setProjectionMatrix(camera.combined);
            shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
            shapeRenderer.setColor(Color.BLACK);
            shapeRenderer.rect(0, 0, GameScreen.WIDTH, GameScreen.HEIGHT);
            shapeRenderer.end();
            break;
        default:
            break;
    }
日志告诉我确实调用了暂停和恢复

但在任务管理器中,我仍然看到游戏,而不是黑色矩形

更新1 要准确回答:

我试了你的建议

package com.mygdx.game;

import android.os.Bundle;
import android.view.WindowManager;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;

public class AndroidLauncher extends AndroidApplication {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        // --
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
        // --
        initialize(new MyGame(), config);
    }
}
但同样的事情,我仍然看到截图

我是安卓工作室2.1的 我的智能手机:一加一 和安卓6.0.1


你有什么想法吗?谢谢

这里有一面旗子。您可以使用这个小方法,例如在onCreate()中,防止Android为“最近的活动”列表创建“屏幕截图”。您可以根据需要激活/停用,例如,仅当实际游戏板可见时才激活

/**
 * Sets/clears FLAG_SECURE which prevents system from creating screenshots for 'recent activities' list.
 * Flag should be set while user is in vault.
 *
 * @param set
 */
protected void setWindowFlagSecure(boolean set) {
    if (set) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
    } else {
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
    }
编辑 关于Libgdx应用程序,我刚刚找到了这样一个答案:似乎在调用initialize()方法后必须设置标志。

您可以使用

public class SampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
            WindowManager.LayoutParams.FLAG_SECURE);

setContentView(R.layout.main);
}
}

在调用setContentView之前,请确保这样做。

这与Ridcully答案有什么不同?不要将其放入应用程序类,但在您不想显示的活动中。.我想我只是一个活动,它是我的AndroidLauncher
Android应用程序可以有多个活动。Libgdx游戏通常应该只包含一个活动。游戏的不同屏幕在libgdx中实现,而不是作为单独的活动。这样做的原因是,创建一个新的活动还意味着创建一个新的OpenGL上下文,这非常耗时,还意味着必须重新加载所有图形资源。
from。我的项目中的其他类只是
Screen
Game
classAh,我没有Libgdx的经验,但看起来AndroidApplication类(您的AndroidLauncher扩展的)实际上是从Activity继承的(我一直想知道应用程序类可以访问Windows)。可能Libgdx环境也会操纵窗口标志。您可以尝试在onPause()方法中设置断点,然后检查是否仍然设置了安全标志——或者只是尝试在onPause()中设置标志。是的,我是对的——请查看我的答案中的编辑。感谢您的回答,我在调用initialize()方法后尝试设置标志,但不像alan_derua在本线程中所说的那样工作。我放弃了禁用屏幕保存的想法,我将以不同的方式解决我的问题