0

データベースから取得した値を保持する3 つの異なるボタンを持つウィジェットがあります。

データベースがメイン アプリケーションで更新されると、データベースから更新された値を取得して表示するために、ウィジェットのボタンが必要になります。

メインアプリケーションで呼び出されたときにボタンの更新を呼び出したいのですが、その方法がわかりません。onStop

どんな提案もいただければ幸いです:)

@Override
protected void onStop()
{ 
 //main application

    .super.onStop();
    WidgetProvider.updateMyWidgets(null, null); // does obviously not work as i dont have Context or Parcelable to send with it
    dblose();
}

public static void updateMyWidget(Context context, Parcelable data) 
{
    AppWidgetManager man = AppWidgetManager.getInstance(context);
    int[] ids = man.getAppWidgetIds(  new ComponentName(context, WidgetProvider.class));
    Intent updateIntent = new Intent();
    updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    updateIntent.putExtra(WidgetProvider.ACTION_WIDGET_BUTTON1, data);
    updateIntent.putExtra(WidgetProvider.ACTION_WIDGET_BUTTON2, data);
    updateIntent.putExtra(WidgetProvider.ACTION_WIDGET_BUTTON3, data);
    context.sendBroadcast(updateIntent);
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
    Log.w("no.reaving", "onUpdate method called");
    getTimeFromDatabase();

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

    Intent active = new Intent(context, WidgetProvider.class);
    active.setAction(ACTION_WIDGET_BUTTON1);
    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 1, active, PendingIntent.FLAG_CANCEL_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.btnTimerWidget1, actionPendingIntent);

    active = new Intent(context, WidgetProvider.class);
    active.setAction(ACTION_WIDGET_BUTTON2);
    actionPendingIntent = PendingIntent.getBroadcast(context, 2, active, PendingIntent.FLAG_CANCEL_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.btnTimerWidget2, actionPendingIntent);

    active = new Intent(context, WidgetProvider.class);
    active.setAction(ACTION_WIDGET_BUTTON3);
    actionPendingIntent = PendingIntent.getBroadcast(context, 3, active, PendingIntent.FLAG_CANCEL_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.btnTimerWidget3, actionPendingIntent);

   // Set the text with the current time.
   remoteViews.setTextViewText(R.id.btnTimerWidget1, TESTSTRING1 + " Hrs");
   remoteViews.setTextViewText(R.id.btnTimerWidget2, TESTSTRING2 + " Hrs");
   remoteViews.setTextViewText(R.id.btnTimerWidget3, TESTSTRING3 + " Hrs");

   appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}


@Override
public void onReceive(Context context, Intent intent) 
{
    WidgetProvider.context = context;
    db = new DatabaseHandler(context);
    getTimeFromDatabase();

    if (intent.getAction().equals(ACTION_WIDGET_BUTTON1)) {
        newAlarm(TESTSTRING1);
        showToast(TESTSTRING1);
    } else if (intent.getAction().equals(ACTION_WIDGET_BUTTON2)) {
        newAlarm(TESTSTRING2);
        showToast(TESTSTRING2);
    } else if (intent.getAction().equals(ACTION_WIDGET_BUTTON3)) {
        newAlarm(TESTSTRING3);
        showToast(TESTSTRING3);
    } else {
        super.onReceive(context, intent);
    }
}
4

1 に答える 1