我创建了一个由服务更新的小部件。但是,该服务处理的界面在添加时不会更新,而是第二次运行应用程序。
widgetProvider.java:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int appWidgetId : appWidgetIds) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
Intent intent = new Intent(context, MetalPriceService.class);
intent.setAction(MetalPriceService.UPDATEPRICE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.widget_refresh_btn, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
context.startService(intent);
}
widgetPriceUpdateService.java:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStart(intent, startId);
try {
updatePrice(intent); //deal with interface updating stuffs
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
stopSelf(startId);
return START_STICKY;
}
答案 0 :(得分:0)
只需将自己设为RemoteView并直接在服务中更新小部件即可。您将通过以下方式获取AppWidgetManager:
AppWidgetManager mgr = AppWidgetManager.getInstance(this);
其他一切都正常。
如果您真的想强制现有的AppWidgetProvider完成工作,请将带有自定义操作的广播发送到您的组件,并在您获得时从onReceive()自己调用onUpdate()