2012-12-06 5 views
10

Da webserivce Sto ricevendo dati sotto forma di date e ora, significa che per qualche data particolare sto avendo un po 'di set di slot. Il seguente diagramma fornisce la spiegazione dettagliata. enter image description hereCome ottenere le notifiche di Android quando l'app è stata chiusa?

Qui in ogni data ho impostato un orario. Qui quello che voglio è visualizzare la notifica alla data e all'ora particolare. Se la risposta dal database consiste di data di domani come 07/12/2012 alle 11:00. Devo visualizzare la notifica in quel momento.

ho qualche idea per quanto riguarda direttore di notifica e il codice che sto usando è ..

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

Ma qui ho bisogno di ottenere notifiche quando applicazione è chiusa anche. Quindi, chiunque mi aiuti con questo.

+0

è possibile scrivere il servizio per eseguire questa attività: -http: //www.vogella.com/articles/AndroidServices/article.html –

risposta

14

Aggiungi un (avviato) Service all'applicazione. Anche se l'utente ha abbandonato la tua app, il servizio verrà comunque eseguito in background.

Inoltre è possibile implementare un BroadcastReceiver che ascolterà gli Intenti del telefono e consentirà l'avvio del servizio all'avvio del telefono!

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

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

// nel tag applicazione

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

Se si desidera avviare il servizio da un'attività, basta usare

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

Grazie per la risposta. Potete aiutarmi con qualche codice di esempio. Come ho appena sviluppato per Android non riesco a trovare il codice relativo alla tua risposta. –

+0

Modificato. Quando si tratta di cosa fare all'interno dell'attività è possibile utilizzare AlarmManager, ScheduledExecutorService, ecc. Si dovrebbe dare un'occhiata a android.developer o ai documenti Java globali sui modi in cui visualizzare gli eventi in momenti specifici. – PeterGriffin

5

Se i dati proviene dal server quindi utilizzando GCM potrebbe essere buono approccio. In questo caso il server avrà la possibilità di riattivare/avviare l'applicazione.

Creazione di un servizio che è costantemente in esecuzione nel vostro caso è una soluzione pessima. L'approccio IMO migliore è l'uso di AlarmManager. Il gestore allarmi invocherà l'intento in un momento specifico. (nota che se il telefono si riavvia devi registrare di nuovo l'intento).