¿Cómo mantengo la pantalla encendida en mi aplicación?

Para mi aplicación de Android, nunca quiero que el teléfono se bloquee o que la luz de fondo se apague

Utilice la clase PowerManager.WakeLock para realizar esto. Vea el siguiente código:

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(); } } 

Utilice el siguiente permiso en el archivo de manifiesto:

  

Espero que esto solucione tu problema…:)

Agregue una línea de código después de setContentView () en onCreate ()

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_flag); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } 

¡Muchas respuestas ya existen aquí! Estoy respondiendo esta pregunta con soluciones adicionales y confiables:

El uso de PowerManager.WakeLock no es una solución tan confiable, ya que la aplicación requiere permisos adicionales.

  

Además, si permanece accidentalmente sosteniendo el locking de activación, puede dejar la pantalla encendida.

Por lo tanto, recomiendo no usar la solución PowerManager.WakeLock . En lugar de esto, use cualquiera de las siguientes soluciones:

Primero:

Podemos usar getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); en onCreate()

 @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } 

Segundo:

podemos usar keepScreenOn

1. implementación usando setKeepScreenOn() en código java:

 @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); } 

Documentos http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

2. Agregar keepScreenOn al diseño xml

   

Documentos http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn

Notas (algunos puntos útiles):

  1. No importa que keepScreenOn se use en una vista principal / raíz / principal. Se puede usar con cualquier vista secundaria y funcionará de la misma manera que funciona en una vista principal.
  2. Lo único que importa es que la visibilidad de la vista debe ser visible. ¡De lo contrario, no funcionará!

No use Wake Lock.

 It requires permission and other stuff and may cause error if you forget to set it in right time. 

La forma más fácil es usar el siguiente código cuando quieras mantener tu pantalla encendida.

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

Una adición a la respuesta si desea eliminar o finalizar keep_Screen_on

 getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

también puedes ver aquí …

Y the best and easiest way … Usar android:keepScreenOn="true" en la raíz de diseño de su actividad hace lo mismo sin código adicional. Pero lo mantendrá en Keep_Scree_on State ..

Puede variar según su demanda. Consulte aquí

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

getWindow es un método definido para actividades, y no requerirá que primero encuentres una View .

Echa un vistazo a esta discusión Force Screen On

hackbod tiene una gran respuesta.

Simplemente puede usar setKeepScreenOn() desde la clase View.

Agregar android:keepScreenOn="true" en el XML de la (s) actividad (es) en la que desea mantener la pantalla es la mejor opción. Agregue esa línea al diseño principal de la (s) actividad (es).

Algo como esto

  ...  

Necesita usar Power Manager para adquirir un locking de activación en su aplicación.

Lo más probable es que estés interesado en un FULL_WAKE_LOCK :

 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); wl.acquire(); .... wl.release(); 

Hay varias formas en que puede hacerlo:

Solución 1:

 class MainActivity extends AppCompactActivity { @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } } 

Solución 2:

En el archivo activity_main.xml, simplemente agregue:

  

Mi consejo: por favor no use WakeLock. Si lo usa, debe definir permisos adicionales y, en general, esto es útil en el entorno de desarrollo de la CPU.

Además, asegúrese de apagar la pantalla mientras cierra la actividad. Puedes hacerlo de esta manera:

 public void onDestry() { getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } 

En este punto, el método

 final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); this.mWakeLock.acquire(); 

es obsoleto.

Debería usar getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); y getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

No es necesario agregar permisos y hacer trucos. Simplemente use el texto a continuación en su diseño principal.

  android:keepScreenOn="true"