2012-04-18 18 views
5

He configurado un AlarmManagr con un tiempo de repetición. Aquí está mi método por el cual estoy estableciendo que:AlarmManager no funciona en modo de suspensión

public void setAlarmManager(Context context, Intent intent) {   
    PendingIntent pendingIntent; 
    pendingIntent = PendingIntent.getService(context, 0, intent, 0);    
    AlarmManager alarmManager = 
     (AlarmManager)context.getSystemService(context.ALARM_SERVICE); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 10); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
           calendar.getTimeInMillis(), 
           40000, pendingIntent);     
} 

Esto funciona bien, excepto cuando mi dispositivo entre en modo de suspensión al que la alarma deja de funcionar hasta que velar al dispositivo manualmente. Después de despertar el dispositivo, el AlarmManager comienza a funcionar nuevamente.

¿Cómo mantener el administrador ejecutándose incluso en modo de suspensión?

+0

AlarmManager.set (AlarmManager.RTC_WAKEUP, ...) funciona bien para mí, no he probado AlarmManager.setRepeating(). tal vez esto esta relacionado? No sé, solo pensé en mencionar – SteelBytes

+0

setRepetir simplemente repita la tarea después de un cierto período de tiempo. el resto de las cosas son las mismas – Reyjohn

+0

¿Alguien puede darme una solución? – Reyjohn

Respuesta

6

Es porque su PendingIntent está llamando a un servicio y no a un BroadcastReceiver, lo que significa que el dispositivo puede volver a dormirse incluso antes de que se cree su servicio. Si te mudas a un receptor de transmisión, "debería" permanecer despierto hasta que se complete la recepción del BroadcastReceiver, lo que significa que tendrás tiempo para obtener un wakelock y comenzar tu servicio. Incluso si te mudas a un BroadcastReceiver, querrás adquirir un wakelock hasta que hayas completado tu procesamiento si va a tomar más de 10 segundos (que es el límite de BroadcastReceiver).

Esto se toma en el apartado 2 de la documentación del androide AlarmManager:

" ... Si el receptor de alarma llama Context.startService(), es posible que el teléfono va a dormir antes de que se puso en marcha el servicio solicitado para evitar esto. , su BroadcastReceiver and Service deberá implementar una política de bloqueo de activación separada para garantizar que el teléfono continúe en ejecución hasta que el servicio esté disponible ".

Cuestiones relacionadas