How to change screen timeout programmatically?
Asked Answered
R

5

29

just wondering whether it's possible to change the screen timeout using code in Android

enter image description here

Reinaldoreinaldos answered 25/5, 2012 at 5:21 Comment(2)
Check this link [https://mcmap.net/q/507835/-android-screen-timeout][1] [1]: https://mcmap.net/q/507835/-android-screen-timeoutPotent
Possible duplicate of android-screen-timeoutSayles
G
54

It is simple to do.. You should learn to solve your problem from Android source code.

  /**
   * 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);
}
Gamic answered 25/5, 2012 at 5:36 Comment(5)
if someone isnt working you may need the permissions <uses-permission android:name="android.permission.WRITE_SETTINGS"/>Isometrics
This does not have an effect on the lockscreen of 4.4+ devices. Anyone have a solution?Evslin
Will this restore the previous value when my Activity is exited or killed?Carbonado
Is it possible to set it less than 15 seconds? I tried in 7.1 but did work for 1 second.Laconism
Hi. I wish to know if there is a way increment the time on screen off whenever there is some process going on. In my case i want the timeout to extend when there is a Data Upload process going over bluetooth.Lorollas
N
14

A better solution is to do one of the following (depending on whether you want it to be dynamic or static):

  1. Specify attribute android:keepScreenOn in layout (xml) (i.e. indefinitely prevent screen timeout at all times),
  2. Add the WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON flag when you create your Activity, or
  3. Use a WakeLock to control how long the screen should be up (dynamic)
Nit answered 16/10, 2012 at 0:51 Comment(0)
L
8

Setting the screen timeout to -1 does not seem to do an accurate job of what is required.

I've found that setting the value to Integer.MAX_VALUE works better.

For example:

android.provider.Settings.System.putInt(content, Settings.System.SCREEN_OFF_TIMEOUT, Integer.MAX_VALUE);

This seems to set the max timeout to the maximum allow by the device.

For example, if when navigating to the display settings on your phone only allows you to have a maximum screen timeout of 30 minutes, doing the above code will set the screen timeout to 30 minutes.

Loci answered 8/11, 2015 at 15:39 Comment(2)
The last parameter takes a string, not an int, should be String.valueOf(Integer.MAX_VALUE)Bessette
This is exactly answer for set Never is put Integer.MAX_VALUE! It is what OS set in the ContentProvider when you choose Never.Fickle
R
5

If anybody needs to set it to never, here is the code

Settings.System.putString(cr, Settings.System.SCREEN_OFF_TIMEOUT, "-1");
Reinaldoreinaldos answered 25/5, 2012 at 7:13 Comment(2)
@kakoppa i have tried to set timeout to never the same way, but not working :(Parthenope
the value of -1 doesn't support anymore on Android 25+ (nougat)Furbish
T
1

Try this. Just change 3000 to whatever screen out time you want. Make sure you provide change system settings permission.

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();
}
T answered 9/10, 2020 at 15:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.