Frage

Ich habe eine Anwendung entwickelt, die eine Sendung erhält und dann eine auf den Markt bringt Activity, wo das Activity Abfragen a ContentProviderDas zieht Informationen in Echtzeit aus dem DNS.

Ich möchte das mischen können, damit anstatt zu gehen:

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

es geht:

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

dh wenn die query() Gibt keine Daten zurück, die ich verpassen möchte, um das zu startenActivity, und lassen Sie die Sendungsnachricht wie gewohnt durchfallen.

Wenn die query() Gibt Daten zurück, ich möchte das Cursor an die geliefert werden Activity, damit ich nicht wieder nach den Daten abfragen muss.

Wiederum die Activity hat eine eigene Benutzeroberfläche, auf die der Benutzer reagieren muss.

Ist das möglich?

War es hilfreich?

Lösung

Was Sie wollen, ist für mich etwas schwierig und ziemlich ineffizient. Ich würde vorschlagen, dass Sie die erste Alternative verwenden, aber wenn Sie den Cursor in der Aktivität laden, überprüfen Sie, ob keine Daten vorhanden sind, und beenden Sie dann die Aktivität.

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

Dies hat genau den gleichen Effekt, der Cursor wird nur einmal geladen und die Aktivität wird nur angezeigt, wenn im Cursor etwas vorhanden ist. Der einzige zusätzliche Overhead ist, dass die Absicht entlassen wird, egal was passiert, aber das ist nicht genau anstrengend :)

Beachten Sie, dass es auch kein Flacker oder irgendetwas gibt. Android behandelt den Fall eines Anrufs in OnCreate () (ich glaube auch OnStart und Onresume), damit der Benutzer nie weiß, dass dies passiert ist.

Andere Tipps

Sie müssen einen Cursor finden oder erstellen, der serialisierbar oder parzelbar ist (und dann intent.setExtra ()). Oder ist es möglich, stattdessen alle Daten als Paket zu lesen und an die Aktivität weiterzugeben?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top