2010-04-04 17 views
8

Estoy tratando de invocar un BroadcastReceiver cuando la pantalla está encendida. En mi AndroidManifest.xml he especificado:android.intent.action.SCREEN_ON no funciona como filtro de intención de receptor

   <receiver android:name="IntentReceiver"> 
        <intent-filter> 
          <action android:name="android.intent.action.SCREEN_ON"></action> 
        </intent-filter> 
       </receiver> 

Sin embargo, parece que el receptor no se invoca (puntos de interrupción no se activan, las declaraciones de registro ignorados). Cambié SCREEN_ON por BOOT_COMPLETED para una prueba, y este se llama a.

Esto se encuentra en un proyecto de 1.6 (SDK nivel 4).

Una búsqueda de código de Google reveló esto, descargué el proyecto y lo sincronicé, lo convertí en el trabajo 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

¿Es esta quizá ya no es compatible?

Anteriormente he sido capaz de interceptar este evento con éxito con una llamada a Context.registerReceiver() de esta manera

registerReceiver(new BroadcastReceiver() { 

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

Sin embargo, esto se llevó a cabo 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.

Respuesta

13

Siguiendo el sabio consejo de CommonsWare me han elegido para tratar de eliminar el servicio de larga vida y utilizar diferentes técnicas .

En realidad, creo que mi consejo era más de un color azul claro ... :-)

Pero todavía tienen que detectar el fuera de la pantalla y en 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 a la vez. ACTION_SCREEN_ON es uno de esos. Consulte este previous question para obtener consejos claros sobre ese tema.

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

+2

Gracias CW.Hubiera sido maravilloso que hubiera algún tipo de advertencia en tiempo de ejecución o en la documentación sobre ACTION_SCREEN_ON que fuera imposible de capturar. Archivo este en 'gotcha'. –

+1

Sí, creo que documentaron que 'ACTION_BATTERY_CHANGED', el ejemplo por excelencia de este fenómeno, se comporta de esta manera, pero definitivamente se saltaron este. Si busca 'ACTION_SCREEN_ON' en el código fuente (por ejemplo, a través de la Búsqueda de códigos de Google) y encuentra su uso en' PowerManagerService', notará que se ha establecido el indicador que indica que solo está registrado-registrado. – CommonsWare

+1

+1 solo para la discusión del color. – 323go

-1

actullay yo estaba faceing este tema pero yo resuelvo succeessfully

1) inicio el servicio de su actividad

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

2) registrar reciver en 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) Listo

Cuestiones relacionadas