1

我们如何在 AppWidgetProvider 的 onReceive 方法上更新主屏幕小部件的视图?。我正在尝试更新我的主屏幕小部件的列表视图,但似乎我无法在 onReceive 方法上访问我的 AppWidgetProvider 的列表视图。我的问题是当我在我的应用程序中更改并返回主屏幕时,小部件没有修改。这是我的 onReceive 的示例代码

public class WidgetTaskSchedular extends AppWidgetProvider {
private final String TAG = "CalendarViewSample:"
        + this.getClass().getName();
static int ID;
int[] sameid=new int[1]; 

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if(intent.getAction().equals("update_widget"))
    {
    Log.i(TAG,"AppWidgetIds:"+ID);

    for(int i=0;i<1;i++)
    {
        sameid[i]=ID;
        Log.i(TAG,"SameId:"+sameid[i]);
        onUpdate(context, AppWidgetManager.getInstance(context),sameid);
    }

    }
}
public static String EXTRA_WORD=
        "com.capsone.testing.calendar.WORD";
@SuppressWarnings("deprecation")
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
     for (int i=0; i<appWidgetIds.length; i++) {
          ID=appWidgetIds[i];
        Log.i(TAG,"LengthofWidget:"+appWidgetIds.length);
          Log.i(TAG,"TestAppWidget:"+appWidgetIds[i]);
          Intent intentWidgetService=new Intent(context, WidgetService.class);
          intentWidgetService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
          intentWidgetService.setData(Uri.parse(intentWidgetService.toUri(Intent.URI_INTENT_SCHEME)));

          RemoteViews remoteView=new RemoteViews(context.getPackageName(),
                                              R.layout.widgetlayout);

          remoteView.setRemoteAdapter(appWidgetIds[i], R.id.listWidget,
                                  intentWidgetService);

          Intent clickIntent=new Intent(context, ActionBarActivity.class);
          PendingIntent clickPendingIntent=PendingIntent
                                  .getActivity(context, 0,
                                                clickIntent,
                                                PendingIntent.FLAG_UPDATE_CURRENT);
          remoteView.setPendingIntentTemplate(R.id.listWidget, clickPendingIntent);
          ComponentName component=new ComponentName(context,WidgetTaskSchedular.class);
          appWidgetManager.updateAppWidget(component, remoteView);
        }

}

}

MainActivity 类:在这个主类中,我更改了一些修改并使用 on pause 方法将其广播到小部件类:

@Override
public void onPause() {
    super.onPause();
    Intent updateWidget = new Intent(getActivity(), WidgetTaskSchedular.class);
    updateWidget.setAction("update_widget");
    PendingIntent pending = PendingIntent.getBroadcast(getActivity(), 0, updateWidget, PendingIntent.FLAG_CANCEL_CURRENT);
    try {
        pending.send();
    } catch (CanceledException e) {
        e.printStackTrace();
    }
}
4

0 回答 0