문제

방송을받은 응용 프로그램을 개발 한 다음 Activity, 어디서 Activity 쿼리 a ContentProviderDNS의 정보를 실시간으로 끌어냅니다.

나는 이것을 셔플 할 수 있도록하기를 원합니다.

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 ()). 아니면 대신 모든 데이터를 소포로 읽고 활동에 전달할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top