2012-12-06 6 views
10

Od webserivce Otrzymuję dane w postaci dat i godzin, oznacza to, że dla pewnej konkretnej daty mam pewien zestaw gniazd. Poniższy schemat zawiera szczegółowe wyjaśnienie. enter image description hereJak uzyskać powiadomienia z Androida, gdy aplikacja była zamknięta?

Tutaj na każdy dzień mam ustawiony czas. Tutaj chcę wyświetlać powiadomienia w określonym dniu i czasie. Jeśli odpowiedź z bazy danych składa się z daty jutrzejszej, takiej jak 07/12/2012 o godzinie 11:00. Muszę wyświetlić powiadomienie w tym czasie.

Mam pewne wyobrażenie dotyczące menedżera powiadomień i kod używam jest ..

Main.java

 NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_action_search, "A New Message!", System.currentTimeMillis()); 

    Intent notificationIntent = new Intent(this, Main.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 

    notification.setLatestEventInfo(Main.this, notificationTitle, notificationMessage, pendingIntent); 
    notificationManager.notify(10001, notification); 

Ale tu muszę się powiadomienia, gdy aplikacja jest zamknięty również. Każdy, kto mi w tym pomoże.

+0

możesz napisać usługę, aby wykonać to zadanie: -http: //www.vogella.com/articles/AndroidServices/article.html –

Odpowiedz

14

Dodaj (rozpocznij) Service do swojej aplikacji. Mimo że użytkownik zamknął aplikację, usługa będzie nadal działać w tle.

Ponadto można zaimplementować program BroadcastReceiver, który będzie słuchał intencji telefonu i umożliwi uruchamianie usługi po uruchomieniu telefonu!

MyService.java

public class MyService extends Service { 

@Override 
public int onStartCommand(Intent intent, int flags, int startId){ 
    // START YOUR TASKS 
return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy() { 
    // STOP YOUR TASKS 
super.onDestroy(); 
} 

@Override 
public IBinder onBind(Intent intent){ 
    return null; 
} 

BootReceiver.java

public class BootReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
      Intent serviceIntent = new Intent("your.package.MyService"); 
      context.startService(serviceIntent); 
      } 
     } 
    } 
} 

AndroidManifest.xml

// w jawnym tagu

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

// w tagu aplikacji

<service android:name=".MyService"> 
    <intent-filter> 
     <action android:name="your.package.MyService" /> 
    </intent-filter> 
</service> 

<receiver 
    android:name=".BootReceiver" 
    android:enabled="true" 
    android:exported="true" 
    android:label="BootReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

Jeśli chcesz zacząć swoją usługę z działalności, wystarczy użyć

private boolean isMyServiceRunning() { 
     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (MyService.class.getName().equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 

if (!isMyServiceRunning()){ 
    Intent serviceIntent = new Intent("your.package.MyService"); 
    context.startService(serviceIntent); 
} 
+0

Dziękuję za odpowiedź. Czy możesz mi pomóc z jakimś przykładowym kodem? Ponieważ jestem nowy w rozwoju Androida, nie mogę znaleźć kodu związanego z Twoją odpowiedzią. –

+0

Edytowane. Jeśli chodzi o to, co należy zrobić w ramach zadania, można użyć programu AlarmManager, ScheduledExecutorService itd. Powinieneś spojrzeć na android.developer lub globalne dokumenty Java na temat sposobów wyświetlania zdarzeń w określonym czasie. – PeterGriffin

5

Jeżeli dane pochodzą z serwera, a następnie wykorzystując GCM może być dobre podejście. W takim przypadku serwer będzie mógł obudzić/uruchomić aplikację.

Stworzenie usługi, która stale działa w Twoim przypadku, jest kiepskim rozwiązaniem. IMO lepszym podejściem jest użycie AlarmManager. Menedżer alarmów wywoła zamiar w określonym czasie. (zwróć uwagę, że jeśli telefon zrestartuje, musisz ponownie zarejestrować zamiar).