Android 为什么小部件在';s补充道

Android 为什么小部件在';s补充道,android,service,widget,Android,Service,Widget,我创建了一个由服务更新的小部件。但是,该服务处理的界面在添加时不会更新,而是在应用程序的第二次运行时更新 widgetProvider.java: @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); for (

我创建了一个由服务更新的小部件。但是,该服务处理的界面在添加时不会更新,而是在应用程序的第二次运行时更新

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;
}

只需创建一个RemoteView,并直接在服务中更新小部件即可。您将通过以下方式获得AppWidgetManager:

AppWidgetManager mgr=AppWidgetManager.getInstance(此)

其他一切正常


如果确实要强制现有AppWidgetProvider执行此工作,请向组件发送带有自定义操作的广播,并在获得时从onReceive()自己调用onUpdate()

这就是我所做的,它可以更新,但不是第一次运行。请你更具体地解释一下,因为我在其他网站上看到过很多次这个“万能”的答案。