Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling hidden API in android to turn screen off

Tags:

android

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?

like image 258
David Shellabarger Avatar asked Dec 09 '09 17:12

David Shellabarger


2 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?

like image 122
mylock Avatar answered Nov 10 '22 20:11

mylock


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.

like image 23
CommonsWare Avatar answered Nov 10 '22 21:11

CommonsWare