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

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

我的意思是屏幕变暗了。

114162 次浏览

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

我没有自己测试它,但是 给你是一个关于这个的小教程。

你可以这样写:

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

我用:

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

禁用屏幕超时和

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

重新启动它。

在视图中,在我的例子中是一个 SurfaceView 子类,您可以将屏幕设置为始终处于打开状态。我想让屏幕保持在这个视图还在画东西的时候。

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


@Override
protected void onDetachedFromWindow(){
super.onDetachedFromWindow();
this.setKeepScreenOn(false);
}

把这个放在开始

    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

Google 还推荐了一种 XML 方式:

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

检查 谷歌幻灯片-幻灯片16。

“如果忘记了 Wakelocks 是昂贵的(...)考虑使用 Android: keep ScreenOn 以确保正确性”

这是解决问题的最好办法

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

值得注意的是,这些方法都必须从 UI 线程运行才能正常工作

简单地添加以下线到您的 MainActivity和您的应用程序永远不关灯。

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

是更好的处理方式,如果我们想让任何特定的屏幕清醒所有的时间,否则我们必须处理自己什么时候启用和禁用它

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

procedure SetSleep(aEnable:Boolean);
var
vFlags: integer;
begin
vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;


if aEnable then
begin
CallInUIThread (   // uses FMX.Helpers.Android
procedure
begin
TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
end );
end
else
CallInUIThread (
procedure
begin
TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
end );
end;

1. getWindow () . addFlags (WindowManager.LayoutParams.FLAG _ KEEP _ SCREEN _ ON) ; 是本机 Android 的最佳解决方案。
2. 如果你想使用 React android 应用程序,请使用以下代码。 < br/>

@ReactMethod
public void activate() {
final Activity activity = getCurrentActivity();
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
});
}


}