I'm thinking about using a hidden api to turn the screen off in my app.
setScreenState
from https://android.googlesource.com/platform/frameworks/base/+/eclair-release/core/java/android/os/Power.java does what I want, but its a hidden API. Does that mean I shouldn't use it? I would think its a fairly stable API.
Currently, I'm setting the screen timeout to 1 millisecond, and then resetting the timeout once the screen turns off. However, android ignores the 1 millisecond and instead it takes about 3 seconds to turn off and sometimes it ignores it completely and doesn't turn off.
Any suggestions?

- 8,084
- 8
- 48
- 62

- 1,523
- 2
- 15
- 23
-
1Are you looking for how to use it? or another way of turning off the screen? You can use reflection to call the method even though it is "hidden". However, you will probably get an exception saying that you don't have access to the method. For some of the API, only "system" processes can use them. And since your application is not a "system" process, then you can't use it. – Ryan Alford Dec 09 '09 at 19:28
-
I would prefer to use a public API, but I can't find one, and the hack I'm using right now with the screen timeout sometimes doesn't work. I think I am familiar with reflection, but I haven't tried it yet. I guess my question is: If I can't find an alternative how bad is it to use a relatively stable hidden API? – David Shellabarger Dec 09 '09 at 22:28
-
1@i4ndroid I doubt that Google will add an api to allow developers to turn off the screen. But don't like me discourage you from petitioning them. I would like to see it. I toyed with the SCREEN_OFF_TIMEOUT and that 5 second delay was a killer. I have since dropped the feature to turn the screen off. I might revisit it later. – David Shellabarger Jan 13 '10 at 21:41
-
@i4ndroid Instead of adding app shortcuts to the lock screen I might suggest having a FLAG_ONGOING_EVENT folder icon in the notification bar that brings up a list of app shortcuts. Just an idea. I've thought about doing something like that myself, but I'm too busy working on other projects. P.S. Please don't name your app Smart Lockscreen when you release as my app is called Smart Lock. http://www.youtube.com/watch?v=Y1JdAlNxLYA – David Shellabarger Jan 13 '10 at 21:44
-
Does this hidden API actually still work on Android 2.3? I couldn't get to run on Android 2.3.x, even setScreenState is called with false, and I see it in the log, the screen does NOT turned off, code: http://pastebin.com/WQKR857z - or anything wrong in my code? – Mathias Conradt Jun 02 '12 at 16:14
-
@David, did you find reliable way to turn off screen ? – ransh Nov 25 '16 at 16:41
3 Answers
Here's what I did to work around the need to make the screen sleep. You can do this in an activity window. I paired it with reducing the sleep timeout to 5 sec for this custom lockscreen activity. You can view all my source over at my project page, but here's the relevant part about turning the screen off that worked for me on a droid.
public void setBright(float value) {
Window mywindow = getWindow();
WindowManager.LayoutParams lp = mywindow.getAttributes();
lp.screenBrightness = value;
mywindow.setAttributes(lp);
}
//call this task to turn off the screen in a fadeout.
class Task implements Runnable {
public void run() {
if (bright != 0) {
setBright(bright/100); //start at 10% bright and go to 0 (screen off)
bright--;
serviceHandler.postDelayed(myTask, 100L);
} else {
setBright((float) 0.0);
bright = 10;//put bright back
}
}
}
I used the handler task as a test for the method, it worked when I called it from onBackPressed in the first build. Now, I just have the activity setBright to 0.0 at onCreate. This makes it so the screen doesn't actually turn on even if my user wakes the CPU by an accidental volume key press. When I want the screen to go on, I have the key event call setBright to a value greater than 0 (1.0 means max bright). I'm very lucky this works for my custom lockscreen activity. I found that changing the literal brightness system setting doesn't work like this, and won't get the screen off.
check out my other source over on my project svn http://code.google.com/p/mylockforandroid/source/checkout
How hard do you think it is to ask the android team to add support for turning the screen off or defining whether the screen should wake via Lock mediator replacement similarly to how you could program an alternative Home Launcher app?

- 13,452
- 6
- 54
- 89

- 559
- 4
- 17
-
I am also testing whether you might be able to pair the shortening of the timeout with code that also reduces the brightness. I've installed brightness widgets in which the slider allowed me to turn it all the way to 0, and upon doing that the screen would actually turn off! I'll report back if I can get somewhere with that. – mylock Jan 12 '10 at 19:39
-
Hey David - I'm calling it myLock. Just a simple toggle for suppressing the lockscreen or sleep timeout. My main version already runs with an ongoing shortcut to the settings interface, but my idea was to make a new lockscreen that emulates a home screen. Anyway, I learned today a way I can turn the screen off or keep it off despite CPU wake with a custom lockscreen. It's pretty ingenious. I'm just wishing we could have access to defining the rules of screen wakeup and a way to send it to sleep in the power manager. I'm going to petition the android team. Watched your smartlock vid, very nice – mylock Jan 14 '10 at 08:02
-
Update: This is working very very well for my needs of keeping the screen off if I get a key event while a dismiss_keyguard window is up that I really don't want turning on the screen. It seems like you'd be able to call up a similar show_when_locked activity with the same functionality when you wanted to do a screen off. my latest source illustrates a timeout so if user presses power during that "silent" wake it will be handled. I haven't yet tested how you might have the show_when_locked window finish itself when the real screen off broadcast comes in signaling the OS timeout is done. – mylock Jan 30 '10 at 18:03
-
How do you turn it back on? When I call setBright(1.0); the screen is still off! – The WebMacheter Mar 22 '11 at 21:24
-
How can you make the screen still listen to touch events while it's 'off'/entirely dimmed? – Mathias Conradt Jun 02 '12 at 14:17
-
setScreenState...does what I want, but its a hidden API. Does that mean I shouldn't use it?
Yes, it means you shouldn't use it. In this case, the whole class would appear to be excluded from the SDK. Please stick to the SDK.

- 986,068
- 189
- 2,389
- 2,491
-
6If you know of a way to turn off the screen reliably, please let me know! – David Shellabarger Dec 09 '09 at 22:29
Use a partial wake lock
http://developer.android.com/reference/android/os/PowerManager.html#PARTIAL_WAKE_LOCK

- 21
- 1