Reputation: 1469
I have an Activity
that usually needs some time to watch the screen without interacting with it.
The problem is that the screen turns off, just like with almos any other app.
I want to prevent that automatic turn off for my Activity
, like Dolphin HD does (if you configure it from the settings menu).
I want to let the user to turn off the screen pressing the usual block button, but prevent the automatic block of the device while in my Activity
.
How can I achieve this?
Thanx.
Upvotes: 48
Views: 59207
Reputation: 15055
To change it on-the-fly do this:
if (keepScreenOn)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
else
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Upvotes: 40
Reputation: 10364
The Android documentation, Keep the device awake outlines each solution.
Documentation - Alternatives to using wake locks
For Fragments use the programmatic approach that is less battery intensive.
activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
activity!!.window.clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON)
For my use case I called this in onStop()
so the screen would default to the normal configuration when the Fragment showing the media content is exited.
keepScreenOn=true
does not work when there is a configuration change such as a screen rotation for Fragments.
Note: Android's Keep the device awake documentation should be updated accordingly to handle this case.
Documentation - Keep the CPU on with Wake Locks
A Wake Lock offers more control over keeping the specific elements of the device awake, but is more battery intensive, and important to release manually to save the battery since it is not handled automatically by the system.
Upvotes: 5
Reputation: 1805
For "Xamarin Android":
Window.AddFlags(WindowManagerFlags.KeepScreenOn);
Upvotes: 2
Reputation: 1006584
Add android:keepScreenOn="true"
to some widget in your layout XML resource for this activity. So long as that widget is visible on the screen, the screen will not turn off automatically.
EDIT:
A WakeLock
, as suggested by other answers, technically will work. But then you have to manually release the WakeLock
(if you mess that up, the screen will stay on a long time). And, since you could mess it up, you need the WAKE_LOCK
permission. Using keepScreenOn
avoids all of that.
Upvotes: 106
Reputation: 161
You may want to use the wake-lock to prevent the screen off.Pleas refer http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
Upvotes: 1
Reputation: 12527
You'll want to add WAKE_LOCK to your manifest, and set and remove it as needed within your app. See the google docs here for PowerManager.WAKE_LOCK
http://developer.android.com/reference/android/os/PowerManager.html
Upvotes: 1