Android在应用程序运行时禁用屏幕超时

有没有办法在我的应用程序运行时禁用屏幕保护程序?

屏幕变暗是我的意思。

你想要使用这样的东西:

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

我用了:

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

禁用屏幕超时和

 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

重新启用它。

Google推荐的还有一种XML方式:

 <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:keepScreenOn="true"> 

检查Google幻灯片 – 幻灯片16。

“如果忘记了Wakelocks是昂贵的(…)考虑使用android:keepScreenOn以确保正确性”

简单地将下面一行添加到您的MainActivity ,您的应用程序永远不会closures灯光。

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

这可以通过获取唤醒锁来完成。

我没有自己testing,但这里是一个小教程。

在一个View中,在我的情况下,一个SurfaceView的子类,您可以始终打开屏幕。 我希望屏幕留在这个视图仍然是东西。

 public class MyCoolSurfaceView extends SurfaceView { @Override protected void onAttachedToWindow (){ super.onAttachedToWindow(); this.setKeepScreenOn(true); } @Override protected void onDetachedFromWindow(){ super.onDetachedFromWindow(); this.setKeepScreenOn(false); } 

把这个onStart

  PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep"); wakeLock.acquire(); 

这在你身上

  <uses-permission android:name="android.permission.WAKE_LOCK" /> 

别忘了

 wakeLock.release(); 

在onStop

其重要的是要注意,这些方法都必须从UI线程运行起来。 请参阅从Android Cordova应用程序中的JavaScript更改KeepScreenOn

这是解决这个问题的最好方法

  getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
 android:keepScreenOn="true" 

如果我们想让任何特定的屏幕始终保持清醒状态,那么处理这个问题的方法就是更好的方法,否则我们必须处理好自己何时启用它并禁用它

https://developer.android.com/training/scheduling/wakelock.html