Detección de encendido / apagado de la pantalla

aquí estoy tratando de determinar si la pantalla está encendida o no, pero no parece estar trabajando cuando presione el botón de bloqueo / desbloqueo de energía. La aplicación funciona sin error, pero el código en if-else doesnt parece tener efecto. Editado ahora el trabajo de código (gracias Olgun ), pero la reproducción de reproductor de medios no se detiene y cada vez que se enciende / se despliega el nuevo objeto de mediaplayer se crea (varias reproducciones).

SCBroadcaster.java

public class SCBroadcaster extends BroadcastReceiver { PowerManager pm; MediaPlayer mp; public static boolean wasScreenOn = true; @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub mp = MediaPlayer.create(arg0, R.raw.gale); if (arg1.getAction().equals(Intent.ACTION_SCREEN_ON)) { mp.stop(); mp.release(); Toast.makeText(arg0, "oNONONO", Toast.LENGTH_LONG).show(); } else if (arg1.getAction().equals(Intent.ACTION_SCREEN_OFF)) { mp.start(); } } } 

MainActivity.java

 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); BroadcastReceiver bre = new SCBroadcaster(); registerReceiver(bre, filter); } protected void onPause() { super.onPause(); if (SCBroadcaster.wasScreenOn) { System.out.println("SCREEN TURNED OFF"); } else { } } protected void onResume() { super.onResume(); if (!SCBroadcaster.wasScreenOn) { } else { } } 

}

4 Solutions collect form web for “Detección de encendido / apagado de la pantalla”

Intent.ACTION_SCREEN_OFF y ACTION_SCREEN_ON comprueban el registro de las transmisiones anteriores. aquí usted puede encontrar un buen ejemplo.

El enfoque con ACTION_SCREEN 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(); } } 

Puedes intentar agregar esto dentro de tu actividad.

 IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new ScreenReceiver(); registerReceiver(mReceiver, filter); 

Del mismo modo, puede agregar ACTION_SCREEN_ON también

Registre su BroadcastReceiver en un Service backgroung para eventos Intent.ACTION_SCREEN_ON e Intent.ACTION_SCREEN_OFF . Funcionó para mí.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.