2012-12-06 7 views
10

Von webserivce bekomme ich Daten in Form von Daten und Zeit, bedeutet für ein bestimmtes Datum ich habe einige Reihe von Slots. Das folgende Diagramm gibt eine detaillierte Erklärung. enter image description hereWie bekomme ich Android-Benachrichtigungen, wenn die App geschlossen wurde?

Hier an jedem Datum habe ich einige Zeiteinstellungen eingestellt. Hier möchte ich Benachrichtigungen zu dem bestimmten Datum und der Uhrzeit anzeigen. Wenn die Antwort aus der Datenbank aus dem morgigen Datum wie 07/12/2012 um 11:00 Uhr besteht. Ich muss zu diesem Zeitpunkt eine Benachrichtigung anzeigen.

Ich habe eine Vorstellung in Bezug auf Benachrichtigungsmanager und Code ich verwende ist ..

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); 

Aber hier muss ich Benachrichtigungen erhalten, wenn App auch geschlossen ist. Also, jemand hilft mir dabei.

+0

können Sie Dienst schreiben, um diese Aufgabe zu tun: -http: //www.vogella.com/articles/AndroidServices/article.html –

Antwort

14

Fügen Sie Ihrer Anwendung ein (gestartetes) Service hinzu. Obwohl der Benutzer Ihre App beendet hat, wird der Dienst weiterhin im Hintergrund ausgeführt.

Darüber hinaus können Sie einen BroadcastReceiver implementieren, der auf die Intents des Telefons hört und Ihren Dienst startet, wenn das Telefon startet!

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

// in Manifest-Tag

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

// in der Anwendung Tag

<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> 

Wenn Sie Ihren Dienst aus einer Tätigkeit beginnen möchten, verwenden Sie einfach

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

Vielen Dank für Ihre Antwort. Können Sie mir mit irgendeinem Beispielcode helfen? Als ich neu zum Android-Entwickeln bin, bin ich nicht imstande, den Code zu finden, der auf Ihre Antwort bezogen ist. –

+0

Bearbeitet. Wenn es darum geht, was in der Aufgabe zu tun ist, könnten Sie AlarmManager, ScheduledExecutorService, etc. verwenden. Sie sollten sich AndroidDeveloper oder globale Java-Dokumente über Möglichkeiten zur Anzeige von Ereignissen zu bestimmten Zeiten ansehen. – PeterGriffin

5

Wenn Daten von Ihrem Server kommt dann GCM nutzen könnte gut sein Ansatz. In diesem Fall kann der Server Ihre Anwendung aufwecken/starten.

Das Erstellen eines Dienstes, der in Ihrem Fall ständig ausgeführt wird, ist eine beschissene Lösung. IMO besser Ansatz ist die Verwendung von AlarmManager. Der Alarmmanager ruft die Absicht zu einer bestimmten Zeit auf. (Beachten Sie, dass Sie bei einem Neustart des Telefons die Absicht erneut registrieren müssen).

Verwandte Themen