Muszę zrobić aplikację, w której muszę ustawić datę io tej konkretnej dacie o godzinie 9, muszę zrobić powiadomienie. Jaka jest najprostsza metoda robienia tego? (Chcę, aby aplikacja działała, nawet jeśli zrestartuję mój telefon lub wyładuję baterię). Czy rozwiązanie AlarmManager jest rozwiązaniem?Powiadomienie o Androidzie w konkretnym dniu
Odpowiedz
Aby zaplanować działania można użyć AlarmManager
Spróbuj tego kodu jest to praca dla mnie:
1/zadeklarować klasę BroadcastReceiver do rozpoczęcia akcji, klasa ta może być w środku swojej działalności lub poza w innym pliku java
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context, intent.getStringExtra("param"),Toast.LENGTH_SHORT).show();
}
}
2/Wewnątrz metodę onCreate umieścić ten kod
AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Receiver receiver = new Receiver();
IntentFilter filter = new IntentFilter("ALARM_ACTION");
registerReceiver(receiver, filter);
Intent intent = new Intent("ALARM_ACTION");
intent.putExtra("param", "My scheduled action");
PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0);
// I choose 3s after the launch of my application
alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000, operation) ;
Uruchamianie aplikacji Toast pojawi się po 3 sekundach, więc możesz zmienić "System.currentTimeMillis() + 3000" swoim czasem budzenia.
Działa idealnie. To powinno być zaakceptowane jako odpowiedź. – user1531978
Powinieneś utworzyć aplikację jako android service.
Usługa to składnik aplikacji, który może wykonywać długie operacje w tle i nie zapewnia interfejsu użytkownika. Inny komponent aplikacji może uruchomić usługę i będzie kontynuować pracę w tle, nawet jeśli użytkownik przełączy się na inną aplikację . Ponadto komponent może wiązać się z usługą do interakcji z nią , a nawet wykonywać komunikację międzyprocesową (IPC). Na przykład usługa może obsługiwać transakcje sieciowe, odtwarzać muzykę, wykonywać operacje wejścia/wyjścia pliku lub współdziałać z dostawcą zawartości, a wszystko to z tła .
Menedżer alarmów jest rozwiązaniem, jak sądzę. powinieneś ustawić menedżera alarmów na konkretny czas, a następnie sprawić, by zadzwonił do powiadomienia w swoim onstart. a to powinno być realizowane w ramach usługi. mam nadzieję, że pomogło.
nie, nie, ale dzięki, tak czy inaczej – user1253236
Musisz użyć parametru AlarmManager
, aby ustawić alarm o typie RTC_WAKEUP
.
Z docs:
Gdy alarm, intencją, która została zarejestrowana przez to nadawane przez system, automatyczne uruchamianie aplikacji docelowej jeśli nie jest już uruchomiony. Zarejestrowane alarmy są zatrzymywane, gdy urządzenie śpi (a może ewentualnie obudzić urządzenie się jeśli zgaśnie w tym czasie), ale zostaną usunięte, jeśli jest wyłączony i restartem.
Więc oznacza to, że:
- Nie musisz usługę stale uruchomiony do osiągnięcia tego celu.
- Może być potrzebny
BroadcastListener
, który nasłuchuje zdarzenia BOOT_COMPLETE , aby ponownie zarejestrować alarm po ponownym uruchomieniu urządzenia.
jak można oczekiwać, że Android będzie działał bez baterii? :) – waqaslam
Chciałem uzyskać to powiadomienie bez ponownego dostępu do aplikacji. – user1253236
OP oczywiście oznacza, że on/ona wyjmuje baterię i ją zastępuje. –