How do I keep the screen on in my App? [duplicate]
For my Android app I never want the phone to lock or the back light to turn off
Add one line of code after setContentView() in onCreate()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flag);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Lots of answers already exist here! I am answering this question with additional and reliable solutions:
Using PowerManager.WakeLock
is not so reliable a solution, as the app requires additional permissions.
<uses-permission android:name="android.permission.WAKE_LOCK" />
Also, if it accidentally remains holding the wake lock, it can leave the screen on.
So, I recommend not using the PowerManager.WakeLock
solution. Instead of this, use any of the following solutions:
First:
We can use getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
in onCreate()
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Second:
we can use keepScreenOn
1. implementation using setKeepScreenOn()
in java code:
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
View v = getLayoutInflater().inflate(R.layout.driver_home, null);// or any View (incase generated programmatically )
v.setKeepScreenOn(true);
setContentView(v);
}
Docs http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)
2. Adding keepScreenOn
to xml layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true" >
Docs http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn
Notes (some useful points):
- It doesn't matter that
keepScreenOn
should be used on a Main/Root/Parent View. It can be used with any child view and will work the same way it works in a parent view. - The only thing that matters is that the view's visibility must be visible. Otherwise, it will not work!
Use PowerManager.WakeLock class inorder to perform this. See the following code:
import android.os.PowerManager;
public class MyActivity extends Activity {
protected PowerManager.WakeLock mWakeLock;
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle icicle) {
setContentView(R.layout.main);
/* This code together with the one in onDestroy()
* will make the screen be always on until this Activity gets destroyed. */
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
}
@Override
public void onDestroy() {
this.mWakeLock.release();
super.onDestroy();
}
}
Use the follwing permission in manifest file :
<uses-permission android:name="android.permission.WAKE_LOCK" />
Hope this will solve your problem...:)