Изменить виджет после того, как он был добавлен - PullRequest
5 голосов
/ 26 июня 2011

Как повторно открыть действие по настройке для виджета после того, как он был добавлен на домашний экран?

Следующий код из поиска Google не работает, потому что идентификатор виджета в дополнительном не переносится на активность:

String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
Intent configIntent = new Intent(context, Configuration.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);
configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
views.setOnClickPendingIntent(R.id.editButton, configPendingIntent);

Ответы [ 2 ]

4 голосов
/ 07 июня 2012

ОК, я опоздал на год, но я просто искал тот же ответ, что и вы, и заметил, что в вашем коде отсутствует флаг, который был ответом на другую проблему, которая у меня была пару дней назад в отношении ожидания намерения, дополнения и виджеты. Попробуйте изменить эту строку своего кода:

PendingIntent configPendingIntent
    = PendingIntent.getActivity(context, 0, configIntent, 0);

к этому:

PendingIntent configPendingIntent
     = PendingIntent.getActivity(context, 0, configIntent,
                                 PendingIntent.FLAG_UPDATE_CURRENT);

PendingIntent будет повторно использовать существующие кэшированные намерения, совпадающие с новыми, и "match" не учитывает дополнительные, поэтому новые дополнительные могут игнорироваться. Добавление FLAG_UPDATE_CURRENT заставляет PendingIntent записывать дополнительные данные в кешированное намерение (или что-то в этом роде).

В любом случае, вышеприведенное сработало для меня только сейчас (хотя я также использовал AppWidgetManager.ACTION_APPWIDGET_CONFIGURE в качестве имени действия, если это имеет какое-то значение).

0 голосов
/ 26 июня 2011

К сожалению, вы этого не сделаете: спецификация виджета в том виде, в котором она существует в настоящее время, не поддерживает реконфигурацию виджетов посредством действия по настройке виджетов.

Что вы можете сделать, это запустить операцию по настройке виджета и отследить конкретный идентификатор виджета вручную: как только новые настройки будут установлены, вы можете обновить виджет вручную, используя метод подходящего менеджера. Однако вы не сможете использовать тот же путь кода, что и новый виджет.

...