http://stackoverflow.com/questions/9561320/android-how-to-turn-screen-on-and-off-programmatically

Before marking this post as a "duplicate", I am writing this post because no other post holds the solution to the problem.

I am trying to turn off the device, then after a few minutes or sensor change, turn it back on.

Turn Off Display Tests

I am able to turn off the screen using:

params.flags |=LayoutParams.FLAG_KEEP_SCREEN_ON;params.screenBrightness =0;
getWindow().setAttributes(params);

I have been unable to turn off the screen using the wl.release() method.

Turn On Display Test

My first guess, as follows, does not work. Nothing happens, screen remains off.

params.flags |=LayoutParams.FLAG_KEEP_SCREEN_ON;params.screenBrightness =-1f;
getWindow().setAttributes(params);

I also then tried to use wakelocks, with no success.

PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"tag");
    wl.acquire();

Finally I have tried the following, with no result.

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

All in all, I don't get any kind of error in the console for any of these methods. My test text "Screen should be on", is on the the screen when I turn on the device using the power button. This shows that the code should have ran. Please only answer if you have tested the code, it seems like many of the functions such as params.screenBrightness = -1, do not work as they should according to the sdk.

Thanks!

share|improve this question
 

6 Answers

I am going to assume you only want this to be in effect while your application is in the foreground.

This code:

params.flags |=LayoutParams.FLAG_KEEP_SCREEN_ON;params.screenBrightness =0;
getWindow().setAttributes(params);

Does not turn the screen off in the traditional sense. It makes the screen as dim as possible. In the standard platform there is a limit to how dim it can be; if your device is actually allowing the screen to turn completely off, then it is some peculiarity of the implementation of that device and not a behavior you can count on across devices.

In fact using this in conjunction with FLAG_KEEP_SCREEN_ON means that you will never allow the screen to go off (and thus the device to go into low-power mode) even if the particular device is allowing you to set the screen brightness to full-off. Keep this very strongly in mind. You will be using much more power than you would if the screen was really off.

Now for turning the screen back to regular brightness, just setting the brightness value should do it:

WindowManager.LayoutParamsparams= getWindow().getAttributes();params.screenBrightness =-1;
getWindow().setAttributes(params);

I can't explain why this wouldn't replace the 0 value you had previously set. As a test, you could try putting a forced full brightness in there to force to that specific brightness:

WindowManager.LayoutParamsparams= getWindow().getAttributes();params.screenBrightness =1;
getWindow().setAttributes(params);

This definitely works. For example, Google's Books apps uses this to allow you to set the screen brightness to dim while using a book and then return to regular brightness when turning that off.

To help debug, you can use "adb shell dumpsys window" to see the current state of your window. In the data for your window, it will tell you the current LayoutParams that have been set for it. Ensure the value you think is actually there.

And again, FLAG_KEEP_SCREEN_ON is a separate concept; it and the brightness have no direct impact on each other. (And there would be no reason to set the flag again when undoing the brightness, if you had already set it when putting the brightness to 0. The flag will stay set until you change it.)

share|improve this answer
 
    
Is there a better way for turning off the screeen? –  akash Oct 23 '13 at 4:47 

I had written this method to turn on the screen after screen lock. It works perfectly for me. Try it-

privatevoid unlockScreen(){Window window =this.getWindow();
        window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
        window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);}

And call this method from onResume().

share|improve this answer
 
    
Not useful if you plan on turning the screen on when you want to terminate the activity. –  AndroidDev Aug 25 '13 at 6:06
1  
Well people, I will suggest not to use my method as this did not work for me on Micromax Canvas2+. Use this link instead. –  Rajkiran Oct 9 '13 at 12:39
arrow
arrow
    全站熱搜

    pcwiki 發表在 痞客邦 留言(0) 人氣()