2013-04-02 1 views
1

사용자가 내 appwidget을 홈 화면에 추가 할 때 ContentObserver을 등록합니다. 원래의 동작은 내 ContentProvider에있는 기본 데이터를 변경하면 내 appwidget이 업데이트 될 것입니다. 문제는 사용자가 기기를 재부팅하면 더 이상 ContentObserver이 등록되지 않는다는 것입니다.부팅시 appwidgets에 대한 콘텐츠 관찰자 등록

안드로이드의 AppWidget 프레임 워크는 장치가 부팅 된 후 어떤 종류의 설정도 할 수있는 고리를 제공하지 않으므로 다른 ContentObserver을 데이터에 등록 할 수 없습니다. 내가 생각할 수있는 유일한 해결책은 BOOT_COMPLETED 작업을 수신하는 Manifest에 등록 된 BroadcastReceiver를 만드는 것입니다. 나는 이것을 할 필요가 없기를 바랬다.

부팅 후 기존 appwidget이 장치를 다시 부팅 할 때 ContentObserver를 등록하거나 (AppWidgets과 관련된 다른 설정을 수행하는) 방법이 있습니까? (가능하면이이 곳의 샘플입니다?)

편집 : 그것은 후 내의 AppWidgetProvider가 호출되고 부팅이 나타납니다

하고 onEnabled 모두가 발생의 onUpdate 콜백. 내 AppWidgetService를 시작하고 RemoteViewsFactory를 만듭니다.이 시점에서 ContentObserver를 등록해야합니다.

비록 어떤 이유로 든 내 ContentProvider의 데이터가 변경 될 때 ContentObserver가 실행되지 않습니다. 나는 이유를 알 수 없다.

답변

2

편집

이 답변은 약간 구식이다. ContentObserver를 유지하기위한 서비스를 만드는 것은 약간 무거 우므로 사용자는 이유를 이해하지 않고 앱이 서비스를 유지하고 있다는 것이 이상하다는 것을 알 수 있습니다. 또한 OS가 서비스를 종료 할 수 있으므로 ContentObserver없이 끝납니다.

데이터가 변경 될 때 appwidget을 강제로 새로 고치는 것이 좋습니다. 구글은 iosched 응용 프로그램에서뿐만 아니라이 작업을 수행합니다

// Widgets can't register content observers so we refresh widgets separately. 
context.sendBroadcast(ScheduleWidgetProvider.getRefreshBroadcastIntent(context, false)); 

출처 : ScheduleProviderScheduleWidgetProvider

ORIGINAL 답변 나는 새로운 서비스 클래스를 만들어 내 자신의 문제를 해결 한

. 내 AppWidgetProvider의 onEnabled() 콜백에서 서비스를 시작하고 onDisabled() 콜백에서 서비스를 중지합니다. 컨텐트 옵저버는 서비스의 onCreate()에 등록되어 있으며 등록 해제 된 사람은 onDestroy입니다.

이 방법을 사용하면 기본 데이터가 변경되어 장치를 재부팅 할 때 모든 appwidget을 업데이트 할 수 있습니다.

+0

서비스를 어떻게 만드십니까? 그것의 일부 코드를 제공해 주시겠습니까? 'ContentObserver'를 안정적으로 등록하는 방법을 찾고있을 때 주로 설정에 관심이 있습니다. – Eloar

+0

이 질문은 약간 구식입니다. 서비스를 실행하는 것은 가치가 없으며 서비스는 OS에 의해 종료 될 수 있습니다. 데이터가 변경되면 위젯을 강제로 새로 고치는 것이 좋습니다. – Karakuri

+0

서비스를 계속 실행하는 것이 그리 효율적이지는 않지만 'ContentObserver'등록 방법은 실패했습니다. 내 'ContentObserver'가 OS에 의해 등록 해제 될 때마다 나는 언제 그리고 왜 확인할 수 없었습니다. 지금까지 최고의 솔루션은 밤늦게까지 작동을 멈췄습니다. 그래서 지금은 원래의 대답에서 접근 방법을 테스트하고 있습니다.'ScheduleWidgetProvider' 접근법은 새로 고침 버튼에 좋지만 즉시 업데이트 할 수있는 안정적인 방법이 필요합니다. – Eloar