Zunächst einmal ein wenig Anleitung, wie zuvor erstellten Alarme zuzugreifen:
Sie zwischen den Alarmen, indem jeder mit einer eindeutigen ID unterscheiden kann, wie:
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
Wenn Sie zugreifen möchten Bei diesem Alarm müssen Sie denselben PendingIntent mit der gleichen eindeutigen ID erstellen. Beispielsweise wird im Folgenden nur auf einen Alarm zugegriffen, den Sie mit der PendingIntent-ID 1234 erstellt haben. Dann wird der vorherige abgebrochen und zurückgesetzt.
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
Die Idee ist einfach. Verfolgen Sie die IDs und verwenden Sie sie dann, um auf ihre jeweiligen Alarme zuzugreifen. Wenn Sie mehrere Alarme mit derselben ID erstellen, wird die vorherige durch die neueste gelöscht.
Kommen Sie zu Ihrem Hauptproblem, anstatt zu überprüfen, ob Ihr Alarm bei jedem Start Ihrer Anwendung aktiv ist, setzen Sie ihn einfach erneut in die onCreate()
Methode Ihrer Aktivität. mit dem gleichen PendingIntent wie ich oben beschrieben habe. Dies erspart Ihnen die mühsame Überprüfung, ob der Alarm vorher eingestellt wurde oder nicht. Da es Ihr Ziel ist, den Alarm am Leben zu erhalten, wird es nicht schaden, den zuvor eingestellten Alarm bei jedem Start der Anwendung zu überschreiben. Stellen Sie nur sicher, dass Sie die gleiche ID verwenden, um Ihren PendingIntent zu erstellen.
Vergessen Sie nicht, wenn die Zeit für Alarm zu überprüfen ist bereits verstrichen ist oder nicht, um zu vermeiden, versuchen, einen Alarm für eine vergangene Zeit einzustellen, die sie sofort auslösen.
Lassen Sie uns einen anderen Fall betrachten: wenn Sie das Gerät ausschalten, werden alle Alarme gelöscht werden. Sie haben keine andere Wahl, als sie beim Neustart neu festzulegen. Um dies zu tun, müssen Sie eine BroadcastReceiver verwenden.
This answer helfen Ihnen weiter, wie das zu tun. Erstellen Sie einfach Ihren Alarm in der onReceive() - Methode Ihres BroadcastReceivers, wie oben vorgeschlagen.
Hallo danke für workground ... Aber was ist der Fall, wenn ich keine Aktivität habe .. dann mein Boot fertig Rundfunkempfänger wird nicht in diesem Fall (Fall mit android-Version 3.0 weiter) arbeiten ... so, wie mit ihm zu kommen .. Weil ich auf einer solchen App arbeite, dass sie ... so keine Aktivität wollen wie man diesen Empfänger registrieren .. – NullPointerException
Sie nur-Tags verwenden müssen. Überprüfen Sie dies: http: //developer.android.com/guide/topics/manifest/receiver-element.html. Wenn Sie einen Dienst zum Erstellen Ihres Alarms verwenden, müssen Sie den Namen der Aktivität oben in den Namen Ihrer Serviceklasse ändern. –
Erol
Naja ok !!! dieses ist die beste Antwort, die ich bekam, also belohne ich es !! – NullPointerException