Domanda

Sto costruendo un'azione che utilizza Google Cloud Messaging per ricevere notifiche push.

Questo comporta un coppia componenti notevoli, vale a dire:

    .
  • A WakefulBroadcastReceiver per ricevere il messaggio da GCM.
  • un IntentService da avvisare quando viene ricevuto un evento GCM.

Poiché sono sicuro che è il caso per molte applicazioni, vorrei prendere un approccio diverso per quando l'applicazione ha un'attività in primo piano vs. quando l'applicazione è non avere unApplicazione in primo piano.

Vorrei pubblicare una notifica al cassetto di notifica se l'applicazione non è attiva e inoltre inoltre l'evento sull'attività in primo piano se l'applicazione è attiva.

C'è un modello di design per questo?Come dovrei andare a determinare se l'app è in primo piano vs. Lo sfondo?

È stato utile?

Soluzione

Puoi seguire un approccio come indicato in Questo blogPost Dove si crea un BroadcastReceiver nel tuo Activity con una priorità positiva (cioè superiore al predefinito di 0) che intercetta un'azione specifica e quindi chiama abortBroadcast: maneggia la custodia APP.Quindi registrati anche un BroadcastReceiver nel tuo manifest che gestisce la stessa azione ma alla priorità predefinita: questo è il fallback se l'app non è aperta e crea la notifica del sistema.

Si utilizza quindi sendOrderedBroadcast() per inviare la trasmissione a tutti i ricevitori registrati in ordine prioritario.Se l'attività è aperta, il primo lo gestirà.Altrimenti, è predefinito all'altro e creerà una notifica.

Altri suggerimenti

Il modo in cui suggerisco di farlo è come segue.

Avere tutta la logica per quanto riguarda GCM in un servizio (non ho mai usato IntentService, quindi non so di è coraggio, ma lo vedo eredita da Service).

Nella tua attività, probabilmente hai un modo di avviare il servizio (forse l'utente si attiva attraverso un pulsante), niente di nuovo qui.

Qui arriva la parte divertente. Nella tua attività gestisci onPause() e onResume(). In onResume() Bind al servizio. Con il meccanismo di rilegatura puoi ottenere un puntatore al tuo servizio e far sapere che sei lì " Hey Service, sono un'attività e sono qui ... Si prega di conservare un puntatore per me da qualche parte "e il servizio memorizza un puntatore all'attività (chiamiamolo mActivity). Nel onPause() notifica al servizio che stai andando, quindi il servizio imposta mActivity = null, e quindi Bind dal servizio.

Con questo meccanismo, ogni volta che il servizio riceve una notifica push, prova la variabile mActivity per vedere se c'è un'attività legata. Con un puntatore alla tua attività puoi invocare tutti i suoi metodi, inoltrare informazioni ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top