Question

J'ai développé une application qui reçoit une diffusion, puis lance un Activity, où ContentProvider interroge un query() qui extrait les informations du DNS en temps réel.

Je voudrais pouvoir mélanger cela afin qu'au lieu d'aller:

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(...);
}

ça 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(...);
}

i.e. si le Cursor ne renvoie aucune donnée, je souhaite rater le lancement du <=>, et laissez le message Diffuser s'écouler normalement.

Si le <=> renvoie les données, je souhaite que <=> soit fourni à le <=>, de sorte que je n'ai pas à aller chercher à nouveau les données.

À son tour, le <=> possède sa propre interface utilisateur à laquelle l'utilisateur doit répondre.

Est-ce possible?

Était-ce utile?

La solution

Ce que vous voulez est un peu difficile et pour moi plutôt inefficace. Je vous proposerais d'utiliser la première alternative, mais lorsque vous chargez le curseur dans l'activité, vérifiez s'il n'y a pas de données, puis quittez l'activité.

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(...);
}

Cela aura exactement le même effet, le curseur ne sera chargé qu'une seule fois et l'activité ne sera affichée que s'il y a quelque chose dans le curseur. La seule surcharge supplémentaire est que l'intention est déclenchée quoi qu'il arrive, mais ce n'est pas vraiment taxant :)

Notez qu’il n’y aura pas de scintillement ni quoi que ce soit, Android gère le cas de la fin de l’appel dans onCreate () (je crois que onStart et onResume également) afin que l’utilisateur ne sache jamais que cela s’est passé.

Autres conseils

Vous devez rechercher ou créer un curseur qui est Serializable ou Parcelable (puis utiliser intent.setExtra ()). Ou peut-être est-il possible de lire toutes les données dans un colis et de les transmettre à l'activité?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top