Opracowałem aplikację, która odbiera transmisję, a następnie uruchamia Activity
, gdzie Activity
wysyła zapytanie o dane, które wyciągają informacje z DNS w czasie rzeczywistym.Przepływ danych między Android BroadcastReceiver, ContentProvider i Activity?
Chciałbym móc przetasować to tak, że zamiast iść:
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(...);
}
idzie:
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(...);
}
czyli jeśli query()
nie zwraca danych chcę przegapić wodowanie Activity
, i pozwól na przesłanie komunikatu Broadcast jako normalnego.
Jeśli query()
ma zwrócić dane, chcę że Cursor
mają być dostarczone do Activity
, tak że nie trzeba iść i zapytań dla danych ponownie.
Z kolei Activity
ma swój własny interfejs użytkownika, na który użytkownik musi odpowiedzieć.
Czy to możliwe?
OK, brzmi dobrze - ale - kiedy następuje wywołanie metody context.startActivity()? – Alnitak
i jak mogę powiadomić BroadcastReceiver, czy działanie zrobiło coś pożytecznego? AFAIK Nie mogę użyć funkcji startActivityForResult() w programie BroadcastReceiver. – Alnitak
Wywołanie context.startActivity natychmiast powraca, zasadniczo wszystko, co robi, planuje rozpoczęcie aktywności w późniejszym czasie, jak tylko główny wątek zdarzenia jest wolny. – sooniln