2011-05-11 18 views

Respuesta

21

El enfoque con el ACTION_SCREEN_ON no funcionó para mí. Después de algunas soluciones diferentes, este código finalmente resolvió el problema para mí:

/** 
* Is the screen of the device on. 
* @param context the context 
* @return true when (at least one) screen is on 
*/ 
public boolean isScreenOn(Context context) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { 
     DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); 
     boolean screenOn = false; 
     for (Display display : dm.getDisplays()) { 
      if (display.getState() != Display.STATE_OFF) { 
       screenOn = true; 
      } 
     } 
     return screenOn; 
    } else { 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     //noinspection deprecation 
     return pm.isScreenOn(); 
    } 
} 
+2

Tuve que agregar una exclusión en mi OnePlus One porque había una pantalla con el nombre "Pen off-screen display" que siempre era STATE_ON. Aparte de eso, esto funciona genial, muchas gracias! :) – tommed

+0

cómo puedo verificar el estado de la pantalla usando Display.getState() en el fondo o cuando la pantalla se apaga necesito algunas cosas en el fondo. ¿alguna idea? @tommed –

+0

Usar un servicio, verificar el estado de la pantalla en segundo plano no es diferente de verificar cualquier otra cosa en segundo plano en android. – tommed

Cuestiones relacionadas