如何以编程方式更改屏幕超时时间?

29

我想知道在Android中是否可以使用代码更改屏幕超时时间。

输入图像描述


请查看此链接:https://dev59.com/iHNA5IYBdhLWcg3wC5NR - Raghu Nagaraju
可能是 android-screen-timeout 的重复问题。 - Imran Rana
5个回答

52

这很简单.. 你应该学会从Android源代码中解决问题。

  /**
   * set screen off timeout
   * @param screenOffTimeout int 0~6
   */
private void setTimeout(int screenOffTimeout) {
    int time;
    switch (screenOffTimeout) {
    case 0:
        time = 15000;
        break;
    case 1:
        time = 30000;
        break;
    case 2:
        time = 60000;
        break;
    case 3:
        time = 120000;
        break;
    case 4:
        time = 600000;
        break;
    case 5:
        time = 1800000;
        break;
    default:
        time = -1;
    }
    android.provider.Settings.System.putInt(getContentResolver(),
            Settings.System.SCREEN_OFF_TIMEOUT, time);
}

7
如果某人的应用程序无法正常工作,您可能需要添加权限<uses-permission android:name="android.permission.WRITE_SETTINGS"/>。 - Javier
1
这对于4.4+设备的锁屏没有影响。有人有解决方案吗? - Flyview
3
当我的 Activity 退出或被销毁时,这会恢复先前的值吗? - Michael
能否将它设置为少于15秒?我在7.1中尝试了一秒钟,但没有起作用。 - shantanu
你好。我想知道是否有一种方法可以在屏幕关闭时增加时间,每当有某些进程正在运行时。在我的情况下,当通过蓝牙进行数据上传过程时,我希望超时时间延长。 - Kishan

14
更好的解决方案是执行以下操作之一(具体取决于您是否希望其为动态或静态):
  1. 在布局(xml)中指定属性android:keepScreenOn (即无限期地防止屏幕超时),
  2. 在创建活动时添加WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 标志,或者
  3. 使用WakeLock来控制屏幕应保持开启的时间(动态)

8
将屏幕超时设置为-1似乎不能准确地完成所需的工作。
我发现将值设置为Integer.MAX_VALUE效果更好。
例如:
android.provider.Settings.System.putInt(content,Settings.System.SCREEN_OFF_TIMEOUT,Integer.MAX_VALUE);
这似乎将最大超时设置为设备允许的最大值。
例如,如果在手机上导航到显示设置时只允许您拥有最长30分钟的屏幕超时,则执行上述代码将把屏幕超时设置为30分钟。

1
最后一个参数应该是字符串而不是整数,应该为String.valueOf(Integer.MAX_VALUE)。 - keag
1
这正是设置为Never时放置Integer.MAX_VALUE的答案!当您选择Never时,这就是操作系统在ContentProvider中设置的内容。 - Taras Okunev

5
如果有人需要将其设置为“从不”,这里是代码。
Settings.System.putString(cr, Settings.System.SCREEN_OFF_TIMEOUT, "-1");

@kakoppa 我已经尝试过以相同的方式设置超时时间为永不,但是没有起作用 :( - user3207655
3
在Android 25+(牛轧糖)上不再支持-1的值。 - Benny

1

试试这个。只需将3000更改为您想要的任何屏幕关闭时间。确保您提供了更改系统设置的权限。

try {
    int mSystemScreenOffTimeOut = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT);
    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 3000);
} catch (Exception e) {
    Toast.makeText(this, "Permission Error", Toast.LENGTH_SHORT).show();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接