Я разработал приложение, которое получает широковещательную передачу, а затем запускает Activity
, где Activity
запрашивает ContentProvider
, который извлекает информацию из DNS в режиме реального времени.Передача данных между Android BroadcastReceiver, ContentProvider и 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);
...
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
имеет собственный пользовательский интерфейс, на который пользователь должен ответить.
Возможно ли это?
нормально, звучит хорошо - но - когда вызов to context.startActivity() возвращается? – Alnitak
, и как я могу сообщить BroadcastReceiver, что активность сделала что-нибудь полезное? AFAIK Я не могу использовать startActivityForResult() в BroadcastReceiver. – Alnitak
Вызов context.startActivity немедленно возвращается, по сути, все, что он делает, - это расписание активности, которое будет запущено позднее, как только поток основного события будет бесплатным. – sooniln