Вопрос

Я разработал приложение, которое получает трансляцию, а затем запускает 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, и позвольте вещательному сообщению проваливаться как обычно.

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

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

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

Это было полезно?

Решение

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

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 () (я считаю, что он также и Oneresume), так что пользователь никогда не знал, что это произошло.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top