Ich entwickle eine App, die AlarmManager verwendet, um eine Reihe von Alarmen (normalerweise um die 50) zu setzen, die zu einer bestimmten Zeit während des Jahres ausgelöst werden müssen. Dies ist der Code, den ich seit 4.4 kitkat benutze den AlarmManager geändert.AlarmManager funktioniert nicht auf Samsung-Geräten in Lollipop
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
long setDate = fireDate.getTime(); // it's a calendar date defined above
Intent intent = new Intent(LOCAL_DISPLAY_MESSAGE_ACTION);
PendingIntent pending = PendingIntent.getBroadcast(ctx,
id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.RELEASE.startsWith("6")) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, setDate, pending);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
am.setExact(AlarmManager.RTC_WAKEUP, setDate, pending);
} else {
am.set(AlarmManager.RTC_WAKEUP, setDate, pending);
}
Abgesehen von dem obigen Code verwende ich einen Broadcast-Empfänger, der im Manifest ordnungsgemäß definiert ist.
public class LocalReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
PushWakeLocker.acquire(context);
// do some stuff
PushWakeLocker.release();
}
}
Weitere Informationen können helfen.
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
Seit ein paar Monaten habe ich nur von Samsung-Geräten schlechte Bewertungen wurde immer (5.0 /5.1 Android-Version), die nicht bekommen, ihre lokalen Meldungen überhaupt. Ich meine, es löst keinen Alarm aus, es scheint, dass das Gerät es überspringt oder nicht aufwacht.
In den Tests, hauptsächlich mit einem Samsung S4 mit 5.0.1, bekomme ich immer die Alarme rechtzeitig, also macht mich das verrückt. FYI dieser Code hat immer gut funktioniert.
Ich recherchierte viel darüber, aber leider habe ich keine hilfreichen Informationen. Es ist nicht so, dass sie mit Verzögerung Alarm schlagen (wie ich in einigen Threads gelesen habe), sie bekommen es überhaupt nicht. Es geht also nicht um das bekannte Problem beim Lollipop und Alarmmanager.
Ich schätze Ihre Zeit und jeder Vorschlag ist willkommen!
"Dies ist der Code, den ich verwende" - Ich würde Ihre 'if' ändern, um' Build.VERSION_CODES.M' zu überprüfen. "Ich benutze einen Broadcast-Empfänger" - Ihr 'WakeLock' ist nicht notwendig, da' onReceive() 'in einem vom System bereitgestellten' WakeLock' aufgerufen wird, wenn es von 'AlarmManager' ausgelöst wird. Wenn "do not some" nur ein paar Millisekunden ist, sollten Sie diese Logik in einen IntentService verschieben und einen 'WakefulBroadcastReceiver' verwenden. Darüber hinaus hat Samsung (wie SONY und andere) eine eigene Konfiguration im Doze-Modus vor Version 6.0, so dass "AlarmManager" unzuverlässig ist, wenn Sie nicht zu einer gerätespezifischen Whitelist hinzugefügt werden. – CommonsWare