2012-03-29 10 views
9

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

+12

jak można oczekiwać, że Android będzie działał bez baterii? :) – waqaslam

+0

Chciałem uzyskać to powiadomienie bez ponownego dostępu do aplikacji. – user1253236

+0

OP oczywiście oznacza, że ​​on/ona wyjmuje baterię i ją zastępuje. –

Odpowiedz

15

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.

+0

Działa idealnie. To powinno być zaakceptowane jako odpowiedź. – user1531978

3

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 .

1

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.

+0

nie, nie, ale dzięki, tak czy inaczej – user1253236

4

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.