2

我需要从 NativeActivity 禁用/启用屏幕调光(当渲染由 OpenGL 执行时)。我继承了 MyNativeActivity:

public class MyNativeActivity extends NativeActivity {
    public final void disableAutoSleep()
    {
        Log.d("TWP", "disableAutoSleep()...");
        runOnUiThread(new Runnable() {          
            @Override
            public void run()
            {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            }
        });
    }
}

然后我使用 JNI 从我的本机代码中调用此方法。我在 LogCat 中看到的是:

06-03 16:51:26.964: D/TWP(2531): disableAutoSleep()...
06-03 16:51:27.034: E/BufferQueue(125): [com.example.MyNativeActivity]
    dequeueBuffer: SurfaceTexture has been abandoned!
06-03 16:51:27.034: W/nvwsi(2531): dequeueBuffer failed, error -19

然后glGetError()(在我的渲染程序中)返回GL_INVALID_FRAMEBUFFER_OPERATION并且屏幕变黑。

似乎 Android 终止或重新创建我的绘图窗口以响应getWindow().addFlags(...). 但我没有收到任何通知engine_handle_cmd(即本机活动中的主要 C++ 消息回调)。我该如何处理或者我做错了什么?

更新

我试过了

ANativeActivity_setWindowFlags(state->activity, AWINDOW_FLAG_KEEP_SCREEN_ON, 0);

但也导致

06-03 18:34:47.054: E/BufferQueue(125): [com.example.MyNativeActivity] dequeueBuffer: SurfaceTexture has been abandoned!
4

0 回答 0