Domanda

Ho sviluppato un'applicazione che riceve una trasmissione e quindi lancia un Activity, dove quello Activity domande a ContentProviderche estrae le informazioni dal DNS in tempo reale.

Mi piacerebbe poterti mescolare in modo che invece di andare:

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);
  ...
  setContentView(...);
}

va:

BroadcastReceiver.onReceive() {
  Cursor = ContentProvider.query(...);
  if (cursor != null) {
     Intent intent = new Intent(...);
     // how do I pass the cursor?
     getContext().startActivity(intent);
  }
}

Activity.onCreate() {
  // how do I retrieve the cursor?
  setContentView(...);
}

cioè se il query() non restituisce dati che voglio perdere il lancio delActivity, e consentire al messaggio di trasmissione di cadere normalmente.

Se la query() restituisce dati, lo voglio Cursor da fornire al Activity, in modo da non dover andare di nuovo a interrogare per i dati.

A sua volta, il Activity ha una propria interfaccia utente a cui l'utente deve rispondere.

È possibile?

È stato utile?

Soluzione

Quello che vuoi è un po 'difficile e per me, piuttosto inefficiente. Propongo di utilizzare la prima alternativa, ma quando si carica il cursore nell'attività, controlla se non ci sono dati e quindi esci dall'attività.

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);

  if(cursor.isEmpty() ...){
    finish();
    return;
  }
  ...
  setContentView(...);
}

Ciò avrà lo stesso identico effetto, il cursore verrà caricato solo una volta e l'attività verrà visualizzata solo se esiste qualcosa nel cursore. L'unico sovraccarico extra è che l'intento viene licenziato, non importa cosa, ma non è esattamente tassa: :)

Nota che neanche non ci sarà alcuna sfarfallio o altro, Android gestisce il caso di chiamare la finitura in suCreate () (credo anche onstart e onResume) in modo che l'utente non sappia mai che è successo.

Altri suggerimenti

Dovrai trovare o creare un cursore serializzabile o parlabile (e quindi utilizzare intent.setextra ()). O forse è possibile invece leggere tutti i dati come pacco e trasmetterli all'attività?

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