Android Broadcastreceiver, ContentProvider 및 Activity 간의 데이터 흐름?
문제
방송을받은 응용 프로그램을 개발 한 다음 Activity
, 어디서 Activity
쿼리 a 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
사용자가 응답 해야하는 자체 UI가 있습니다.
이게 가능해?
해결책
당신이 원하는 것은 다소 어렵고 나에게는 비효율적입니다. 첫 번째 대안을 사용하도록 제안하지만 활동에 커서를로드하면 데이터가 없는지 확인한 다음 활동을 종료하십시오.
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는 깜박임이나 아무것도 없을 것입니다. Android는 OnCreate ()에서 마감을 호출하는 경우 (OnStart 및 OnResume도 믿습니다)를 처리하여 사용자가 그 일이 발생한 것을 알지 못하게합니다.
다른 팁
직렬화 가능하거나 소포 가능한 커서를 찾거나 만들어야합니다 (그리고 의도를 사용합니다 .setextra ()). 아니면 대신 모든 데이터를 소포로 읽고 활동에 전달할 수 있습니까?