Tôi đã phát triển một ứng dụng nhận được một Broadcast và sau đó khởi chạy một Activity
, trong đó Activity
truy vấn ContentProvider
để lấy thông tin ra khỏi DNS trong thời gian thực.Dataflow giữa Android BroadcastReceiver, ContentProvider và Hoạt động?
Tôi muốn để có thể xáo trộn này để thay vì đ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(...);
}
nó đi:
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(...);
}
tức là nếu query()
lợi nhuận không có dữ liệu tôi muốn bỏ lỡ phóng Activity
và cho phép tin nhắn phát đi như bình thường.
Nếu query()
không trả lại dữ liệu, tôi muốn điều đó Cursor
để được cung cấp cho các Activity
, vì vậy mà tôi không cần phải đi và truy vấn cho các dữ liệu một lần nữa.
Đổi lại, Activity
có giao diện người dùng riêng mà người dùng cần phản hồi.
Điều này có khả thi không?
ok, âm thanh tốt - nhưng - khi nào lệnh gọi context.startActivity() trở lại? – Alnitak
và làm cách nào để cho BroadcastReceiver biết liệu Hoạt động có hữu ích không? AFAIK Tôi không thể sử dụng startActivityForResult() trong BroadcastReceiver. – Alnitak
Cuộc gọi đến context.startActivity trả về ngay lập tức, về cơ bản, tất cả những gì nó làm là lên lịch cho hoạt động được bắt đầu sau này ngay sau khi chuỗi sự kiện chính miễn phí. – sooniln