Wie kann ich den AlarmManager stoppen.

  • 6 Antworten
  • Letztes Antwortdatum
T

the_time

Ambitioniertes Mitglied
0
Hallo,
ich starte einen AlarmManager in der MainActivity, dann wird der Intent an die onHandleIntent() Methode geschickt. Von dort wird einen Request an den Server geschickt, danach wird die Response von der onHandleIntent() an die Map Activity weitergeleitet. Was ich erreichen will, ist den AlarmManager in the MainActivity komplett zu stoppen wenn die onBackPressed() Methode in der Map Activity aufgerufen wurde.

Code in the MainActivity:

Code:
               Intent intent = new Intent(MainActivity.this,
                                GetLLRD.class);
                        intent.putExtra("json_data", json);
                        PendingIntent pendingIntent = PendingIntent.getService(
                                getApplicationContext(), 123, intent,
                                PendingIntent.FLAG_UPDATE_CURRENT);
                        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                        Calendar cal = Calendar.getInstance();
                        alarm.setRepeating(AlarmManager.RTC_WAKEUP,
                                System.currentTimeMillis(), 20 * 1000,
                                pendingIntent);
                        startService(intent);

Map Activity:

Code:
public class Map extends FragmentActivity implements OnMapReadyCallback {
  .
  .
  .
    @Override
    public void onBackPressed() {
     //Hier will ich den AlarmManager stoppen.
    }
}

Schöne Grüße,
the_time.
 
Zuletzt bearbeitet:
Du musst den gleichen Intent benutzen wie beim setzen (siehe auch hier -> Notification mit AlarmManager anzeigen )

Code:
alarmManager.cancel(PendingIntent.getBroadcast(this,1,
                            new Intent(MainActivity.this, GetLLRD.class),
                            PendingIntent.FLAG_UPDATE_CURRENT));
 
Danke für die Antwort.

Ich habe das folgende probiert aber es feuert immer noch und er wrid nicht gestoppt.

Code:
       Intent intent = new Intent(Map.this,
                MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getService(
                getApplicationContext(), 123, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);
     
        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(pendingIntent);
 
weil dein pendingintent nicht dasselbe ist...die Id ist schon mal "123" in dem anderen hast du eine Id von "1"

(editiert weil falsche Aussage :))

Ok habe da etwas verwechselt denke ich mal versuch mal einfach anstatt "123" eine "1" d
 
Also ich habe die id auch davor in der MainActivity geändert also ich habe für beide 123. Aber den zweiten Punkt verstehe ich nicht verstanden. Wo soll ich Map.this mit reinschreiben? Ist der Context bei mir falsch?
Code:
 Intent intent = new Intent(Map.this,
                MainActivity.class)

Also wenn der ein Button geklickt wird, sendet der Alam die geklickte Daten an die IntentService class GETLLRD, dann werden die Daten von der onHandleIntent Methode an den Server geschickt. Die Antwort (longitude, latitude, ..) wird danach an die Map Activity weitergeleitet.
 
du hast meine uneditierte version elesen: es kommt darauf an dass das PendingIntent genauso aufgebaut wird wie beim setzen...

Versuch mal das Intent in beiden Fällen so aufzubauen:

Code:
Intent intent = new Intent(getBaseContext(),
                                GetLLRD.class);

Du brauchst das PEnding Intent ja nur um den Alarm zu canceln also wird das Intent nicht ausgeführt wenn du ihn canclen möchtest(denke ich :))
 
also das Problem war der Context also so funktioniert es :

Code:
    Intent intent = new Intent(Map.this,
                GetLLRD.class);
 
Zurück
Oben Unten