如何隐藏应用程序在任务管理器中的预览

时间:2016-07-29 19:03:40

标签: java android libgdx pause

我用Java和LibGdx制作游戏

这是一个有时间限制的技巧游戏,问题是玩家可以按下主页按钮暂停应用程序,然后转到任务管理器,并且可以看到应用程序的预览,以便在不计算时间的情况下寻找他必须找到的内容< / p>

task manager

所以,当玩家按下主页按钮暂停时,我想隐藏应用程序的预览

我尝试做什么

我覆盖暂停和恢复处理程序

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

我的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

对Ridcully回答:

我尝试了你的建议

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

但同样的,我仍然看到截图

我使用的是Android Studio 2.1 我的智能手机:Oneplus One 和Android 6.0.1

你知道吗?感谢

2 个答案:

答案 0 :(得分:2)

有一面旗帜。你可以使用这个小方法,例如在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应用程序的this SO答案:似乎你必须设置标志 AFTER 来调用initialize()方法。

答案 1 :(得分:-2)

您可以使用

执行此操作
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之前执行此操作。