2012-09-19 5 views
8

Hier noch aufgerufen ist der Code, den ich verwenden, um einen Alarm für meinen Widget zu setzen:PendingIntent Linien- AlarmManager.RTC Typ wird im Schlafmodus

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

aber das Problem ist, dass selbst in dem Schlafmodus, onReceive() wird immer noch von der Absicht ausgelöst.

Obwohl nach der Verwendung setInexactRepeating anstelle von setRepeating, die Verzögerungen zwischen Anrufen bis zu 1 Minute im Schlafmodus erhöht werden, aber das ist immer noch Batterie verbrauchen.

+0

Was ist Ihre Frage? – HitOdessit

+1

'AlarmManager.RTC' sollte das Gerät nicht im Schlafmodus aufrufen! Was muss ich tun, um den Aufruf zu vermeiden? – SAbbasizadeh

+0

Was ist Android OS-Versionen und Geräte/Emulatoren testen Sie Ihren Code? – HitOdessit

Antwort

1

Ich glaube, dass Sie den Alarm so einstellen, dass er 8 Sekunden nach der Kalenderzeit ausgelöst wird, die Sie 8 Sekunden vor der aktuellen Uhrzeit eingestellt haben. So stellen Sie den Alarm so ein, dass er sofort ausgelöst wird.

Ich sehe keinen Grund, warum Sie hier einen Kalender benötigen. Der Kalender wird nur verwendet hier die Zeit 8 Sekunden in der Zukunft zu verfolgen:

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

Der Alarm erzeugt wird hier alle 8 Sekunden auslösen:

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

Der Alarm alle acht Sekunden ausgelöst wird fortgesetzt.

Ich würde versuchen zu ändern:

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

An:

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

Wenn Sie weiterhin Probleme haben, dann vielleicht das Intervall ist das Problem. Versuchen Sie, setRepeating() zu set() zu ändern, um zu sehen, ob das der Fall ist.