So brechen Sie BroadcastReceiver in Android ab

8

Ich mache eine SMS-Zeitplan-App, die einfach Zeit, SMS und Nummer vom Benutzer braucht und sendet diese SMS zu einer bestimmten Zeit. Ich verwende PendingIntent . Hier ist mein Beispielcode.

Wenn der Benutzer einen Zeitplan erstellt, ruft er einfach diese Methode auf.

%Vor%

Und hier ist die 'SMSBroadcastReceiver.java' Datei

%Vor%

Meine Frage ist: Wenn der Benutzer den Zeitplan bearbeitet, wie kann ich diese Sendung abbrechen und eine neue senden? Da es mehr als einen Zeitplan geben kann, wie findet man den zu ändern / abbrechen?

    
Ahmad Abbasi 26.12.2012, 19:00
quelle

4 Antworten

10
  

Wenn der Benutzer den Zeitplan bearbeitet, wie kann ich diese Übertragung abbrechen und eine neue senden?

Rufen Sie cancel() auf AlarmManager mit einem äquivalenten PendingIntent zu demjenigen auf, mit dem Sie den Zeitplan erstellt haben:

%Vor%
  

Da es mehr als einen Zeitplan geben kann, wie findet man die zu ändern / abzubrechen?

Es gibt nur einen Alarm in Ihrer Implementierung.

    
CommonsWare 07.01.2013, 15:43
quelle
6

Wenn Sie einen Verweis auf die ausstehende Absicht haben, können Sie Abbrechen die Absicht. Wenn Sie eine aktuelle Sendung abbrechen möchten, können Sie abortBroadcast .

Siehe auch:

1) Wie erhalte und annulliere ich einen PendingIntent?

2) Stoppen Sie die ausstehende Absicht

3) Abbrechen / Abbrechen von Übertragungen

    
Ben Holland 26.12.2012 19:12
quelle
0
  • public final void abortBroadcast ()

Hinzugefügt in API Level 1 Legt das Flag fest, das angibt, dass dieser Empfänger die aktuelle Übertragung abbrechen soll; funktioniert nur mit Broadcasts, die über Context.sendOrderedBroadcast gesendet werden. Dies verhindert, dass andere Rundfunkempfänger die Sendung empfangen. Es ruft weiterhin onReceive (Context, Intent) des BroadcastReceivers auf, den der Aufrufer von Context.sendOrderedBroadcast übergeben hat.

Diese Methode funktioniert nicht mit nicht geordneten Broadcasts, wie sie mit Context.sendBroadcast

gesendet wurden     
Ramesh Sangili 09.01.2013 21:44
quelle
0

Wenn Sie nur Timemilli ändern, können Sie Ihre Funktion sendMessage() erneut aufrufen.

%Vor%

Die Funktion AlarmManager.set () bricht den vorherigen Alarm automatisch ab, solange der pendingIntent derselbe ist; Es muss nicht dieselbe Instanz sein, sondern muss gemäß Intent.filterEquals () übereinstimmen:

  

Aufgrund dieses Verhaltens ist es wichtig zu wissen, wann zwei Intents zum Abrufen eines PendingIntent als gleich angesehen werden. Ein häufiger Fehler, den Menschen machen, besteht darin, mehrere PendingIntent-Objekte mit Intents zu erstellen, die sich nur in ihren "zusätzlichen" Inhalten unterscheiden, wobei sie jedes Mal einen anderen PendingIntent erwarten. Das passiert nicht. Die Teile der Absicht, die für den Abgleich verwendet werden, sind dieselben, die von Intent.filterEquals definiert sind. Wenn Sie zwei Intent-Objekte verwenden, die äquivalent nach Intent.filterEquals sind, erhalten Sie für beide den gleichen PendingIntent.

Ссылка , lang, android.app.PendingIntent)

Ссылка http://developer.android.com/reference/android/content/Intent.html#filterEquals (android.content.Intent)

    
CodeShane 10.01.2013 02:37
quelle