2013-08-12 1 views
2

나는 기본적으로 내 응용 프로그램 내에서 기능에 대한 빠른 링크입니다 위젯의 커플이 방송에 대한 응답으로위젯 UI는이 위젯 주 동안 변경 데이터에 의해 기본적으로 ListView에 /있는 GridViews 백업되는되는,

를 업데이트하지 앱 실행. 데이터는 응용 프로그램 실행 중에 변경되기 때문에

업데이트 빈도는 이렇게 설정됩니다

public void updateWidget(@SuppressWarnings("rawtypes") Class provider) { 
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 
    int[] gridids = appWidgetManager.getAppWidgetIds(new ComponentName(this.getPackageName(), provider.getName())); 

    Intent intent = new Intent(this, provider); 
    intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); 
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,gridids); 
    sendBroadcast(intent); 
} 

내가 할 수 있어요 :

android:updatePeriodMillis="0" 

데이터에

나는 다음과 같은 화재 변경 제공자의 onReceive() 및 업데이트 호출 메커니즘에서이를 파악하십시오.

내가 겪고있는 문제는 코드가 실행되고 updateAppWidget()이 호출되었지만 위젯의 UI가 변경되지 않는다는 것입니다.

위젯 업데이트에 관련된 트릭이 누락 되었습니까?

+0

는 또한 안드로이드를 설정하는 것을 염두에 두어야 잘 작동 30 분은 그 시간으로 설정하지 않고 자동으로 30 분으로 폴백합니다. 30 분 최소 타이머는 코드를 통해서만 재정의 될 수 있습니다. – Milan

+0

@Milanix - [android documentation]에 따르지 않음 (http://developer.android.com/guide/topics/appwidgets/index.html) - 0으로 설정하면 자동 업데이트가 비활성화됩니다. – Graeme

+1

아, 그리워, 고마워. 학습을 멈추지 않을 수 있습니다 :) – Milan

답변

2

This answer 문제를 해결하는 것으로 보입니다. 아래의 updatePeriodMillis :이 문제를 해결하지만 않는 이유...

는 의도에 다음 줄을 추가

확실하지가

Intent intent = new Intent(context, GridViewWidgetServiceAdapter.class); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); 
intent.putExtra("Random", Math.random() * 1000); // Add a random integer to stop the Intent being ignored. 
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
+0

"문제가 해결 된 이유는 확실하지 않지만 작동하지 않습니다 ...": Android는 onUpdate 메소드에서 사용하는 인 텐트를 캐시하고있는 것 같습니다. 또한 Remoteview는 기본적으로 캐시됩니다. 그래서 매번 다른 번호를 보내야합니다. jquery를 캐싱하는 것을 피하기 위해 "./jquery.js?v=somerandomnumebr"로 jquery를 가져 오는 jquery 캐싱의 개념과 비슷합니다. – ashutosh