Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I prevent an Android device from going to sleep programmatically?

Tags:

android

People also ask

How do I stop my Android phone from going to sleep in certain apps?

On the Battery page, head to Background usage limits. Here, you'll find three different lists of apps that have some form of power management enforced on them. To see the list of apps that are allowed to run in the background with as few restrictions as possible, tap Never sleeping apps.

How do I keep my Android screen awake?

Open Settings. Tap Display. Tap Sleep or Screen timeout. Select how long you want your Android smartphone or tablet screen to stay on before turning off due to inactivity.

How do I set my Android phone to never sleep?

To get started, go to the Settings > Display. In this menu, you'll find a Screen timeout or Sleep setting. Tapping this will allow you to change the time it takes your phone to go to sleep. Certain phones offer more screen timeout options.

How do I turn off auto sleep on my Android?

To enable/disable Auto-sleep and/or Battery saver functions: tap the Sync icon in the upper left hand corner of the screen. go to Settings – Battery saver/Auto-sleep.


If you just want to prevent the sleep mode on a specific View, just call setKeepScreenOn(true) on that View or set the keepScreenOn property to true. This will prevent the screen from going off while the View is on the screen. No special permission required for this.


One option is to use a wake lock. Example from the docs:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

// screen and CPU will stay awake during this section

wl.release();

There's also a table on this page that describes the different kinds of wakelocks.

Be aware that some caution needs to be taken when using wake locks. Ensure that you always release() the lock when you're done with it (or not in the foreground). Otherwise your app can potentially cause some serious battery drain and CPU usage.

The documentation also contains a useful page that describes different approaches to keeping a device awake, and when you might choose to use one. If "prevent device from going to sleep" only refers to the screen (and not keeping the CPU active) then a wake lock is probably more than you need.

You also need to be sure you have the WAKE_LOCK permission set in your manifest in order to use this method.


I found another working solution: add the following line to your app under the onCreate event.

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

My sample Cordova project looks like this:

package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;

public class ScanManActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        super.loadUrl("http://stackoverflow.com");
    }
}

After that, my app would not go to sleep while it was open. Thanks for the anwer goes to xSus.


android:keepScreenOn="true" could be better option to have from layout XML.

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


Set flags on Activity's Window as below

@Override public void onResume() {
 super.onResume();
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

@Override public void onPause() {
 super.onPause();
 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

From the root shell (e.g. adb shell), you can lock with:

echo mylockname >/sys/power/wake_lock    

After which the device will stay awake, until you do:

echo mylockname >/sys/power/wake_unlock    

With the same string for 'mylockname'.

Note that this will not prevent the screen from going black, but it will prevent the CPU from sleeping.

Note that /sys/power/wake_lock is read-write for user radio (1001) and group system (1000), and, of course, root.

A reference is here: http://lwn.net/Articles/479841/