Dataflow mezi Android BroadcastReceiver, ContentProvider a aktivity?

hlasů
5

Jsem vyvinuli aplikaci, která přijímá vysílání a poté zahájí v tomto směru Activity, kdy že Activitydotazy ContentProvider , které vytáhne informace z DNS v reálném čase.

Rád bych, aby bylo možné zamíchat to tak, že místo toho, aby šel:

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

to jde:

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

tedy v případě, že query()se vrátí žádná data chci vynechat spouštění Activitya umožňují zpráva Broadcast propadávání jako normální.

V případě, že query()ano vrátit data, chci, které Cursormají být dodány do Activity, takže nemám jít a dotaz na data znovu.

Na druhé straně, Activitymá své vlastní uživatelské rozhraní, které potřebuje uživatel reagovat.

Je to možné?

Položena 19/03/2009 v 15:07
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
5

Co chcete, je poněkud obtížné a pro mě poněkud neefektivní. Navrhoval bych, že budete používat první možnost, ale při načtení kurzor v činnosti, zkontrolujte, zda není k dispozici žádná data, a pak ukončit činnost.

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

To bude mít stejný účinek, kurzor bude načten pouze jednou, a aktivita se zobrazí pouze tehdy, pokud v kurzoru existuje něco. Jediná dodatečná režie je, že záměr je aktivována bez ohledu na to, ale to není zrovna zdanění :)

Všimněte si, že tam nebude žádný blikání nebo něco buď Android zpracovává případ volání skončit v onCreate () (Věřím onStart a onResume stejně), takže uživatel nikdy neví, že se to stalo.

Odpovězeno 19/03/2009 v 19:14
zdroj uživatelem

hlasů
0

Budete muset najít nebo vytvořit kurzoru, který je Serializable nebo Parcelable (a použít intent.setExtra ()). Anebo je možné namísto číst všechna data ve formě balíku a předat, že k aktivitě?

Odpovězeno 19/03/2009 v 16:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more