У меня есть виджет с 3 разных кнопки, которые содержат некоторые значения, которые я получаю из своей базы данных.значения кнопки обновления виджета в главном приложении
Когда база данных обновляется в основном приложении, мне нужны кнопки в виджетах , чтобы получить обновленные значения из моей базы данных, а затем отобразить их.
Я хотел бы назвать обновление на кнопках, когда onStop
вызывается в основного приложения, но я просто не могу понять, как это сделать.
Любые suggesteons будут оценены :)
@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);
}
}
какой ошибка-х вы получаете? –
RuntimeException: невозможно остановить активность MainOpeningActivity. Я просто думаю, что должен быть лучший способ, а затем вызвать его статически, например, с широковещательным приемником, как указано ниже, но я не знаю, как использовать широковещательный приемник. – Reaver