Autore Topic: Comunicazione in background  (Letto 711 volte)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Comunicazione in background
« il: 21 Settembre 2012, 14:28:07 CEST »
0
Il mio post è più che altro una richiesta di consigli.
Allora in una screen dell" app l' utente clicca su un pulsante e l' app recupera la posizione e la invia al server con una frase del tipo "io sono qui".

L' idea è di non bloccare la navigazione dell' utente con Dialog o altro quindi l' utente può cambiare schermata. La domanda come faccio a notificare alla nuova activity che il server ha ricevuto il messaggio?.
Se fosse stata una semplice Notification bastava un Service e l' apertura della notification ma io voglio che si visualizzi nella nuova Activity o qualsiasi activity.
Potrei usare un broadcastreceiver ma significa che ogni activity devo aggiungere il "listener" e mi pare oneroso di risorse.

Soluzioni?


Inviato dal mio Galaxy Nexus con Tapatalk 2
La domanda stupida è quella che non si fa

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
R: Comunicazione in background
« Risposta #1 il: 21 Settembre 2012, 15:21:50 CEST »
0
Io prenderei in considerazione di usare un IntentService e scambiare messaggi tramite Intent con  LocalBroadcastManager (meno oneroso che quelli a livello di sistema)

Inviato dal mio Galaxy Nexus con Tapatalk 2

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Comunicazione in background
« Risposta #2 il: 22 Settembre 2012, 11:11:37 CEST »
+1
Quindi alla fine è simile a quello che ho detto nel senso che per ogni Activity devo fare il registerReceiver e unregisterReceiver

Quindi creo un Service o un Task che ha il compito di inviare le info al server dopo la risposta dal service/task/asyntask con Intent faccio il sendBroascast

Scrivo un po di "peusdo" codice.

Activity Generica

 
Codice (Java): [Seleziona]
@Override
public void onCreate(Bundle savedInstanceState) {

//al create creo il broadCast
  LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,
      new IntentFilter("evento_server"));
}



private BroadcastReceiver mReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
   
    String message = intent.getStringExtra("message");
    Log.d("receiver", "Messaggio: " + message);
  }
};

@Override
protected void onDestroy() {
  //distruggo
  LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
  super.onDestroy();
}

Invio al server e  alla risposta

Codice (Java): [Seleziona]
private void sendMessage() {
 
  Intent intent = new Intent("evento_server");
 
  intent.putExtra("message", "Info salvata");
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

Certo cosi posso sfruttare l' architettura anche per altre cose...
La domanda stupida è quella che non si fa