I know its possible to use a wakelock to hold the screen, cpu, ect on but how can I programmatically change the "Screen Timeout" setting on an Android phone.
Asked
Active
Viewed 2.5k times
4 Answers
27
public class HelloWorld extends Activity
{
private static final int DELAY = 3000;
int defTimeOut = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// Be sure to call the super class.
super.onCreate(savedInstanceState);
// See assets/res/any/layout/hello_world.xml for this
// view layout definition, which is being set here as
// the content of our screen.
setContentView(R.layout.hello_world);
defTimeOut = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, DELAY);
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, DELAY);
}
@Override
protected void onDestroy()
{
super.onDestroy();
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, defTimeOut);
}
}
And also dont forget to add this permission in manifest:
android:name="android.permission.WRITE_SETTINGS"

Milad Faridnia
- 9,113
- 13
- 65
- 78

user788435
- 1
- 1
- 2
- 4
12
The Settings.System provider offers a SCREEN_OFF_TIMEOUT setting that might be what you are looking for.

CommonsWare
- 986,068
- 189
- 2,389
- 2,491
-
@CommonsWare how can i set the screen off timeout to never? – user3207655 Jun 30 '15 at 10:39
-
I think this only works when lock screen is enabled. How to achieve it if lock screen is disabled? – Abhiroop Nandi Ray Jun 02 '23 at 09:48
1
Here is a code-sheet, you can do more.
long stand = Settings.System.getLong(
mContext.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT,
-1);
long sec = stand / 1000;
String time = null;
if(stand<0) {
//close.
}
else if( sec >= 60) {//to minute
time = String.format(mContext.getString(R.string.minutes), (sec / 60) + "");
} else {
time = String.format( mContext.getString(R.string.seconds),sec + "");
}

TeeTracker
- 7,064
- 8
- 40
- 46