Użyłem tego samego w toku, aby ustawić wiele alarmów przy użyciu różnych intentId dla każdego alarmu. alarm działa. Teraz chcę anulować dany alarm. Jeśli użyję metody cancel(), to w końcu anuluję wszystkie alarmy. Chcę, aby usunięto tylko konkretny. Również użytkownik powinien mieć możliwość anulowania tego alarmu nawet podczas drugiego lub trzeciego uruchomienia. Podobnie jak w przypadku, gdy uruchomię go po raz drugi, nie będę mieć tego samego obiektu oczekującego. Czy musiałbym utrzymać obiekt oczekujący? Jeśli tak to jak? i jak mogę anulować pojedynczy alarm z wielu alarmów?Anulowanie pojedynczego alarmu w przypadku wielu alarmów
Odpowiedz
Można zrobić to w ten sposób,
W swojej Czeka intencyjny można przekazać unique ID
w miejsce requestCode
PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0);
i anulować MOŻESZ użyj tego samego unikalnego identyfikatora, aby go anulować, wykorzystując ten sam Pending Intent.
am.cancel(pi);
Dla uzyskania więcej informacji można po prostu używać StackOverflow lub Google, na razie myślę this answer
zrobi dla ciebie. :)
Jeśli ustawisz unikalny_id na czas alarmu w milisekundach, możesz zagwarantować, że będzie unikalny. Dlatego możesz łatwo to anulować. Sprawdziłem to. Metodą kalendarza jest calendar.getTimeInMillis() – bschwagg
Oto rodzaj hack do tego z wyjaśnieniem.
Przede wszystkim powinieneś stworzyć unikalną intencję dla oczekującej intencji. W tym celu możesz utworzyć niestandardowe pole danych dla swojej aplikacji. Zrobić to w następujący sposób:
Intent intent = new Intent();
intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION);
Uri data = Uri.withAppendedPath(
Uri.parse("myapp://myapp/Id/#"),
String.valueOf(intentId));
intent.setData(data);
W twoim przypadku intentId
będzie twój unikalny identyfikator intencji.
Następnie należy utworzyć powiadomienie alarmManager w zwykły sposób. Aby anulować alarm, wykonaj następujące czynności. Na początku powinieneś stworzyć intencję jak w poprzednim przykładzie kodu. Następnie tworzysz oczekujące intencje na podstawie tego zamiaru (tworzysz również ten sam oczekujący na alarm). A potem anulować alarm:
Intent intent = new Intent();
intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION);
Uri data = Uri.withAppendedPath(
Uri.parse("myapp://myapp/Id/#"),
String.valueOf(intentId));
intent.setData(data);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
- 1. Identyfikowanie i anulowanie wysyłania alarmów do menedżera alarmowego
- 2. Łączenie wielu warunku w instrukcji pojedynczego przypadku w serwerze Sql
- 3. Android AlarmManager: czy istnieje sposób na anulowanie WSZYSTKICH ustawionych alarmów?
- 4. Współbieżność Java: koordynowanie wielu zadań i anulowanie
- 5. Menedżer alarmów w Androidzie
- 6. jak zmienić dynamiczny tekst alarmu ustawienia systemu
- 7. Wywołanie setOnClickListener i setOnLongClickListener w przypadku pojedynczego przycisku
- 8. Architektura AWS w przypadku wielu regionów
- 9. zaktualizuj tabelę przestawną w przypadku wielu lub wielu relacji laravel4
- 10. Menedżer alarmów natychmiast uruchomiony
- 11. Anulowanie wątków.Timer w Pythonie
- 12. Powtarzanie alarmu dla poszczególnych dni tygodnia android
- 13. Anulowanie PendingIntent
- 14. pisanie wielu obiektów java do pojedynczego pliku
- 15. Rejestrowanie wielu implementacji za pomocą pojedynczego interfejsu
- 16. Elastyczne wyszukiwanie wielu analizatorów dla pojedynczego pola
- 17. eksportowanie wielu tabel dostępu do pojedynczego XML
- 18. Anulowanie wielu przepływów pracy SharePoint przy użyciu PowerShell
- 19. Odzyskaj requestcode od alarmu broadcastReceiver
- 20. Włączanie i wyłączanie alarmu ios
- 21. R: ustawianie wartości dla wielu wystąpień przypadku
- 22. Anulowanie zadań w metodzie Dispose
- 23. Usuwanie wielu zasobów podczas pojedynczego żądania w usłudze RESTful
- 24. Używanie pojedynczego systemu() Wezwanie do wykonywania wielu poleceń w C
- 25. Czytanie pojedynczego pliku z wielu wątków w pythonie
- 26. Wydajność podczas czytania pojedynczego bajtu w porównaniu do wielu naraz?
- 27. Przetwarzanie pojedynczego pliku z wielu procesów w pythonie
- 28. Rejestracja pojedynczego singleton dla wielu interfejsów w IOC
- 29. Lepszy sposób akceptowania wielu typów żądań w metodzie widoku pojedynczego?
- 30. Anulowanie z WaitHandle
Nie znam metody anulowania pojedynczego alarmu na zestawie alarmów o tym samym zamiarze w toku. Można jednak oznaczyć konkretny czas alarmu jako anulowany za pomocą pewnej metody utrwalania (wspólne preferencje, plik, sqlite, ...) oraz w kodzie wywoływanym przez intencję alarmu Oceń zapisaną informację, aby określić, czy alarm został anulowany. Możesz również anulować wszystkie alarmy i ustawić wszystkie oprócz jednego później (jeśli nadal wiesz, ile razy). BTW, nie potrzebujesz oryginalnego zamiaru, możesz utworzyć nowy. – Stefan