Обновление виджета изнутри приложения - PullRequest
0 голосов
/ 06 октября 2018

Добрый день!Я хочу добавить текст из приложения в виджет, у меня есть основной вид деятельности, и у него есть представление списка, и много текстового содержимого, и у него есть кнопка для добавления текста в виджет с помощью общих настроек, он отлично работает, когда я закрываю виджет ивоссоздайте только его, иначе он не обновится автоматически, если кто-нибудь знает;Как решить эту проблему, пожалуйста, помогите мне.здесь я прикрепил код виджета ниже.

    public class WidgetMaster extends AppWidgetProvider {

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                            int appWidgetId) {

    Intent intentHome = new Intent(context, MainActivity.class);
    PendingIntent pendingIntentHome = PendingIntent.getActivity(context, 0, intentHome, 0);

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_master);

    views.setOnClickPendingIntent(R.id.wid_home, pendingIntentHome);

    final SharedPreferences sharedPreferencestoWi = context.getSharedPreferences(String.valueOf(R.string.addTextToWidgetPref), MODE_PRIVATE);
    String forWidget = sharedPreferencestoWi.getString("textToWidget", "");
    String dum = "add from reading";
    if(forWidget.equals("")){
        views.setTextViewText(R.id.dum_appwidget_text, dum);
        appWidgetManager.updateAppWidget(appWidgetId, views);
    } else {
        views.setTextViewText(R.id.appwidget_text, forWidget);
        views.setViewVisibility(R.id.appwidget_text, 0);
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }

}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
        for (int appWidgetId : appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }

}

@Override
public void onEnabled(Context context) {
    // Enter relevant functionality for when the first widget is created
}

@Override
public void onDisabled(Context context) {
    // Enter relevant functionality for when the last widget is disabled
}

}

1 Ответ

0 голосов
/ 09 октября 2018

Как обновить виджет из mainActivity?

В файле конфигурации виджета вы можете указать фиксированный интервал обновления.Наименьший интервал обновления составляет 1800000 миллисекунд (30 минут).

Но лучше обновлять виджет программно, для этого вам следует отправить broadCast для обновления виджета и использовать метод, такой как alarmManager или Handler, для повторяющейся задачи
например, вы можете использовать следующий BroadCast для обновления формы виджета mainActivity:

Intent intent = new Intent(this, WidgetMaster.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);                   

int[] ids = AppWidgetManager.getInstance(getApplication())
                      .getAppWidgetIds(new ComponentName(getApplication(),WidgetMaster.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);
...