Потоковый между Android BroadcastReceiver, ContentProvider и активностью?

голоса
5

Я разработал приложение , которое получает Broadcast , а затем запускает Activity, где что Activityзапрашивает информацию, ContentProvider которая извлекает информацию из DNS в режиме реального времени.

Я хотел бы иметь возможность перетасовать это так, что вместо того, чтобы идти:

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

он идет:

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

т.е. если query()не возвращает данных Я хочу пропустить запуск Activityи позволит сообщение Broadcast провалиться в обычном режиме.

Если query()же возвращает данные, я хочу, Cursorчтобы подаваться к Activity, так что я не должен снова пойти и запрос для данных.

В свою очередь, Activityимеет свой собственный пользовательский интерфейс которой пользователь должен реагировать.

Это возможно?

Задан 19/03/2009 в 15:07
источник пользователем
На других языках...                            


2 ответов

голоса
5

То, что вы хотите, довольно трудно и мне, довольно неэффективен. Я хотел бы предложить вам использовать первый вариант, но при загрузке курсора в деятельности, проверьте, нет данных, а затем выйти из деятельности.

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

Это будет иметь тот же эффект, курсор будет загружен только один раз, и активность будет отображаться только если что-то существует в курсоре. Только дополнительные накладные расходы, что цель не будет уволен, независимо от того, что, но это точно не облагая налогом :)

Обратите внимание, что не будет никакого мерцания или что-нибудь либо, Android обрабатывает случай вызова закончить в OnCreate () (я считаю OnStart и onResume, а), так что пользователь не знает, что это случилось.

Ответил 19/03/2009 d 19:14
источник пользователем

голоса
0

Вам нужно найти или сделать курсор, что это Сериализуемый или Parcelable (а затем использовать intent.setExtra ()). Или, может быть, можно вместо этого прочитать все данные в виде посылки и передать, что к деятельности?

Ответил 19/03/2009 d 16:13
источник пользователем

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