2012-09-19 10 views
8

Oto kod, który można ustawić alarm dla mojego widget:PendingIntent zaplanowane przy użyciu typu AlarmManager.RTC nadal powoływać się w trybie uśpienia

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); 
} 

ale problemem jest to, że nawet w trybie uśpienia, onReceive() jest nadal wyzwalane przez zamiar.

Chociaż po użyciu setInexactRepeating zamiast setRepeating, opóźnienia między połączeniami zwiększają się do 1 minuty w trybie uśpienia, ale nadal zużywają dużo energii.

+0

jakie jest twoje pytanie? – HitOdessit

+1

'AlarmManager.RTC' nie powinien wywoływać urządzenia w trybie uśpienia! Co powinienem zrobić, aby uniknąć wywoływania? – SAbbasizadeh

+0

co to są wersje systemu operacyjnego Android i urządzenia/emulatory, na których testujesz swój kod? – HitOdessit

Odpowiedz

1

Wydaje mi się, że ustawiasz alarm tak, aby uruchamiał się 8 sekund po czasie Kalendarza, który ustawiłeś 8 sekund przed aktualnym czasem .. więc ustawiasz alarm, aby natychmiast zadziałał.

Nie widzę powodu, dla którego potrzebujesz Kalendarz tutaj. Kalendarz jest po prostu wykorzystywane do śledzenia po raz 8 sekund w przyszłości tutaj:

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

Alarm jest stworzony, aby wywołać co 8 sekund tutaj:

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

Alarm nadal wyzwalać co osiem sekund.

chciałbym spróbować zmienić:

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

Do:

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

Jeśli nadal występują problemy, to może interwał jest problem. Spróbuj zmienić setRepeating() na set(), aby sprawdzić, czy tak jest.

Powiązane problemy