2012-09-19 17 views
8

Aquí está el código que he utilizado para programar una alarma para mi aparato:PendingIntent programado utilizando el tipo de AlarmManager.RTC todavía se invoca en el modo de suspensión

private static void setAlarm(Context context) { 
    Intent myIntent = new Intent(context, Widget.class); 
    myIntent.setAction(AUTO_UPDATE); 
    PendingIntent pendingIntent = 
      PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Service.ALARM_SERVICE); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 8); 
    alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000, 
      pendingIntent); 
} 

pero el problema es que incluso en el modo de reposo, onReceive() todavía se desencadena por la intención.

Aunque después de usar setInexactRepeating en lugar de setRepeating, las demoras entre llamadas se incrementan hasta 1 minuto en modo de suspensión, pero eso aún consume batería.

+0

¿cuál es tu pregunta? – HitOdessit

+1

'AlarmManager.RTC' no debe invocar el dispositivo en modo de suspensión. ¿Qué debo hacer para evitar invocar? – SAbbasizadeh

+0

¿Qué es Android OS versiones y dispositivos/emuladores que está probando su código? – HitOdessit

Respuesta

1

Creo que está configurando la alarma para que se dispare 8 segundos después de la hora del calendario, que ha establecido 8 segundos antes de la hora actual ... por lo que está configurando la alarma para que se dispare instantáneamente.

No veo ningún motivo por el que necesite un calendario aquí. El calendario sólo se utiliza para controlar el tiempo de 8 segundos en el futuro aquí: se crea

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.add(Calendar.SECOND, 8); 

la alarma para activar cada 8 segundos aquí:

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000, 
     pendingIntent); 

la alarma continúa para disparar cada ocho segundos.

me gustaría probar cambiando:

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000, 
     pendingIntent); 

Para:

alarmManager.setInexactRepeating(AlarmManager.RTC, System.currentTimeMillis(), 8000, 
     pendingIntent); 

Si continúa teniendo problemas, entonces tal vez el intervalo es el problema. Intente cambiar setRepeating() a set() para ver si ese es el caso.

Cuestiones relacionadas