android.intent.action.SCREEN_ON no funciona como un receptor que intenta filtrar

Estoy tratando de invocar un BroadcastReceiver cuando la pantalla está encendida. En mi AndroidManifest.xml he especificado:

     

Sin embargo, parece que el receptor nunca se invoca (los puntos de interrupción no se disparan, las declaraciones de registro se ignoran). Cambié SCREEN_ON por BOOT_COMPLETED para una prueba, y esto se invoca.

Esto está en un proyecto de 1.6 (SDK nivel 4).

Una búsqueda de código de Google lo reveló, descargué el proyecto y lo sincronicé, lo convertí para que funcione con las últimas herramientas, pero tampoco es capaz de interceptar ese evento.

http://www.google.com/codesearch/p?hl=en#_8L9bayv7qE/trunk/phxandroid-intent-query/AndroidManifest.xml&q=android.intent.action.SCREEN_ON

¿Esto quizás ya no es compatible?

Previamente he podido interceptar este evento exitosamente con una llamada a Context.registerReceiver () como tal

 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // ... } }, new IntentFilter(Intent.ACTION_SCREEN_ON)); 

Sin embargo, esto fue realizado por un servicio de larga vida. Siguiendo el sabio consejo de CommonsWare, he elegido tratar de eliminar el servicio de larga vida y usar diferentes técnicas. Pero aún necesito detectar la pantalla y los eventos.

Siguiendo el sabio consejo de CommonsWare, he elegido tratar de eliminar el servicio de larga vida y usar diferentes técnicas.

De hecho, creo que mi consejo fue más de un azul claro … 🙂

Pero aún necesito detectar la pantalla y los eventos.

Hay ciertos eventos para los que Android no quiere iniciar nuevos procesos, por lo que el dispositivo no tarda demasiado en tener todo tipo de cosas que ejecutar todas a la vez. ACTION_SCREEN_ON es uno de esos. Consulte esta pregunta anterior para obtener consejos claros sobre ese tema.

Por lo tanto, debe preguntarse a sí mismo: “Sí, ¿realmente necesito controlar esos eventos?”. Al equipo principal de Android le gustaría que tu respuesta fuera “no”.

Actullay estaba enfrentando este problema pero lo resolví con éxito

1) iniciar el servicio desde su actividad principal

  Intent i = new Intent(MainActivity.this, UpdateService.class); startService(i); 

2) registrar el receptor en la clase de servicio.

 @Override public void onCreate() { super.onCreate(); // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new ScreenReciever(); registerReceiver(mReceiver, filter); } 

3) Hecho