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