防止Android屏幕在特定屏幕上进入睡眠状态(LibGDX)

时间:2017-05-24 05:49:47

标签: java android mobile libgdx

我正在使用LibGDX为Android创建游戏。在我的一种游戏模式中,用户使用加速计来移动播放器,但是由于用户没有触摸屏幕,屏幕将变暗并进入睡眠状态。

我知道我可以添加和清除标记,以防止屏幕在整个应用程序中进入睡眠状态:

// Add flags
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// Clear flags
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).

使用that保持应用程序唤醒工作正常但我无法解决如何仅为特定屏幕(使用加速度计)打开(和关闭)因为您必须在onCreate中添加标志() 方法。否则当用户不在使用加速度计的游戏模式时(例如在主菜单上......),屏幕将进入睡眠状态。

基本上,我希望能够以编程方式打开和关闭该功能,以防止屏幕睡眠。 谢谢你的回答!

注意:我真的不想使用唤醒锁,因为它需要特殊许可,并且可能有危险(不发布)

编辑:我在各种屏幕上使用libGDX和screen Interface(例如菜单,选项,游戏......)。据我所知,这只是一个Android视图。我希望能够设置" keep_Screen_on"仅在我的一个屏幕而不是整个应用程序中为true。

1 个答案:

答案 0 :(得分:1)

您可以使用相同的接口。

core模块

中创建一个界面
public interface Service {

     void keepScreenOn(boolean isOn);
}

在android模块中实现此接口

public class AndroidLauncher extends AndroidApplication implements Service {

   View gameView;

   @Override
   protected void onCreate (Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       gameView=initializeForView(new Main(this), config);
       setContentView(gameView);
   }

   @Override
   public void keepScreenOn(final boolean isOn) {

       runOnUiThread(new Runnable() { 
            @Override 
            public void run() { 
                gameView.setKeepScreenOn(isOn); 
            } 
       });
   }
 } 

核心模块中的Main / ApplicationListener类

public class Main extends ApplicationAdapter {

   Service service;

   public Main(Service service){
      this.service=service;
   }
}

您已Service的引用,当您转到特定屏幕时,可以调用服务界面的keepScreenOn()

我没有对此进行测试,但它应该有效。