6

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!

+0

"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

Antwort

9

Ihr Problem (oder Alptraum) ist die Samsung Smart Manager. Diese App ist seit 2015 mit allen Samsung Handys vorinstalliert und soll unbenutzte Apps deaktivieren. "Woher weiß es, welche Apps nicht verwendet werden?" Sie können fragen - einfach:

Jede App, die seit 3 ​​Tagen nicht vom Benutzer gestartet wurde, wird deaktiviert.

Alle übrigen Einträge des AlarmManagers werden natürlich auch gelöscht. Sie können darüber in ihren "Entwicklerforen" lesen. Fühlen Sie sich frei, here oder here zu folgen, bis diese Threads vom Personal gelöscht werden. Ich habe noch nicht gesehen, dass jemand von Samsung auf das Thema reagiert hat.

Die einzige Möglichkeit, dies zu beheben, besteht darin, die Benutzer Ihrer App über die Situation zu informieren und ihnen zu zeigen, wie Sie Ihre App in Smart Manager auf die weiße Liste setzen können. Wir mussten eine Website mit Schritt-für-Schritt-Anleitungen einrichten, die zeigen, wie dies für unsere Benutzer funktioniert.

Vielleicht denken Sie darüber nach, einen Hintergrunddienst einzurichten oder alle sechs Stunden AlarmManager aufzurufen - keiner dieser Hacks funktioniert.

+2

Vielen Dank für Ihren Fund mit mir! Du hast meinen Tag gerettet. Es ist wirklich ärgerlich, dass Samsung so etwas macht und keine Verantwortung dafür übernimmt. etw. –

+2

UPDATE: Wenn Ihr Paketname "alert" oder "alarm" enthält, deaktiviert Smart Manager die App nicht. Mehr hier: http: // Stackoverflow.com/a/34085645/128092 – saibotd

+0

Wissen Sie, ob JobScheduler statt AlarmManager in diesem Fall hilft? – jakk