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

时间:2010-11-16 15:21:05

标签: android

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

屏幕变暗就是我的意思。

12 个答案:

答案 0 :(得分:154)

你想使用这样的东西:

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

答案 1 :(得分:91)

我用过:

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

禁用屏幕超时和

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

重新启用它。

答案 2 :(得分:74)

Google建议采用XML方式:

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

检查Google Slides - 幻灯片16。

  “如果被遗忘,唤醒锁是昂贵的(...)考虑使用   android:keepScreenOn以确保正确性“

答案 3 :(得分:3)

简单地在您的MainActivity下方添加以下行,您的应用永远不会关灯。

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

答案 4 :(得分:2)

在View中,在我的情况下是SurfaceView子类,您可以将屏幕设置为on on。我希望屏幕保持开启,而这个视图仍在绘制内容。

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

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

答案 5 :(得分:2)

将其放在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();

at onStop

答案 6 :(得分:2)

重要的是要注意这些方法都必须从UI线程运行才能工作。见changing KeepScreenOn from javascript in Android cordova app

答案 7 :(得分:1)

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

我自己没有测试过,但是here是一个关于此的小教程。

答案 8 :(得分:0)

这是解决此问题的最佳方法

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

答案 9 :(得分:0)

android:keepScreenOn="true"
如果我们想让任何特定的屏幕一直处于唤醒状态,那么

是更好的处理方式,否则我们必须自己处理启用它并禁用它

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

答案 10 :(得分:0)

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;

答案 11 :(得分:0)

1.getWindow()。addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);是本机Android的最佳解决方案。
2.如果您想使用React android应用程序,请使用以下代码。

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

    }