Автообновление виджета [дубликат]

Я отправляю этот ответ, потому что мой интерфейс администратора Virtualmin / Webmin решил, что было бы неплохо отключить мой PHP-движок. Я нашел время, чтобы найти решение, поэтому я решил поделиться с ним вы, ребята:

Также не забудьте проверить, что ни один из ваших конфигурационных файлов вашего сайта, связанных с этим конкретным хостом или виртуальным хостом, не имеет в них php_admin_value, которые отключают PHP, например:

php_admin_value engine Off

В случае сомнений прокомментируйте это ...

# php_admin_value engine Off

И перезагрузите свой веб-сервер.

78
задан MKJParekh 6 November 2014 в 06:24
поделиться

8 ответов

Если вы равны , используя AppWidgetProvider, вы можете обновить его следующим образом:

Intent intent = new Intent(this, MyAppWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
 int[] ids = AppWidgetManager.getInstance(getApplication())
    .getAppWidgetI‌​ds(new ComponentName(getApplication(), MyAppWidgetProvider.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);
152
ответ дан Marko Topolnik 22 August 2018 в 02:00
поделиться
  • 1
    Где вы устанавливаете widgetId? – Kris B 12 July 2012 в 18:59
  • 2
    @KrisB из приведенного ниже ответа, получите массив, выполнив следующее: int ids [] = AppWidgetManager.getInstance (getApplication ()). GetAppWidgetIds (новое имя компонента (getApplication (), WidgetProvider.class)); – MobileMon 15 November 2012 в 14:42
  • 3
    Вы можете использовать константу, не требуя жесткого кода: intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); – Mārtiņš Briedis 16 July 2013 в 19:46
  • 4
    НЕ используйте комментарий @gelupa для использования R.xml.mywidget для widgetID! Это ПОЛНОСТЬЮ неправильно и просто стоило мне 4 часа отладки !!! ИСПОЛЬЗУЙТЕ решение MobileMon для получения правильного widgetID – Ilja S. 11 June 2017 в 13:24
  • 5
    для идентификаторов: `int widgetIDs [] = AppWidgetManager.getInstance (activity) .getAppWidgetIds (новое имя компонента (activity, widget.class)); – ArMo 372 22 June 2017 в 13:58

Просто получите экземпляр AppWidgetManager и обновите его напрямую. Или, если вы используете IntentService для выполнения обновлений, вызовите startService() на IntentService. AppWidgetProvider - это способ обновления виджета приложения, но это не единственный способ.

5
ответ дан CommonsWare 22 August 2018 в 02:00
поделиться

Решение Phaethon в Kotlin:

    val intent = Intent(this, MyAppWidgetProvider::class.java)
    intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
    val ids = AppWidgetManager.getInstance(application).getAppWidgetIds(ComponentName(getApplicationContext(),MyAppWidgetProvider::class.java!!))
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
    sendBroadcast(intent)

Где MyAppWidgetProvider получен из AppWidgetProvider: class MyAppWidgetProvider : AppWidgetProvider() {

0
ответ дан Elletlar 22 August 2018 в 02:00
поделиться
int widgetIDs[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), WidgetProvider.class));

for (int id : widgetIDs)
    AppWidgetManager.getInstance(getApplication()).notifyAppWidgetViewDataChanged(id, R.id.widget_view);
}
11
ответ дан Jakob Eriksson 22 August 2018 в 02:00
поделиться
  • 1
    Требуется уровень min-api: 11. – Anirudh Ramanathan 7 January 2013 в 14:42
  • 2
    Потрясающие. Вам даже не нужно зацикливать, есть версия notifyAppWidgetViewDataChanged(), которая принимает массив. – Lawrence Kesteloot 5 March 2016 в 02:18

Попробуйте следующее:

int[] ids = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), MyWidget.class));
        MyWidget myWidget = new MyWidget();
        myWidget.onUpdate(this, AppWidgetManager.getInstance(this),ids);
18
ответ дан Si8 22 August 2018 в 02:00
поделиться
  • 1
    – Henrique de Sousa 25 September 2014 в 22:06
  • 2
    Принятый ответ не сработал ... Я проверю это. – Si8 21 November 2016 в 04:12
  • 3
    @ Si8 Он работает как шарм! – Oleg Tarashkevich 21 November 2016 в 07:59
  • 4
    Благодарю. Я тестирую его сейчас и опубликую отзывы. Проверенная и подтвержденная работа. Мне интересно, будут ли разные типы виджетов, будет ли он работать одинаково? (+1 кстати для работы) – Si8 21 November 2016 в 12:05
  • 5
    я получаю всегда ids 0 – omor 25 May 2017 в 06:07
63
ответ дан Stuck 22 August 2018 в 02:00
поделиться

Если вы работаете с виджетами, которые используют коллекцию, такую ​​как ListView, GridView или StackView, для обновления элементов виджетов, выполните следующие действия:

Context context = getApplicationContext();
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisWidget = new ComponentName(context, StackWidgetProvider.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.stack_view);

С помощью этого метода notifyAppWidgetViewDataChanged () , вы можете заставить элементы виджета получать новые данные в реальном времени.

8
ответ дан thanhtd 22 August 2018 в 02:00
поделиться
  • 1
    На самом деле это именно то, что я искал. Спасибо! – user1806772 17 March 2016 в 19:17

Итак, чтобы обновить виджет из активности, вы можете сделать это следующим образом:

Intent intent = new Intent(this, DppWidget.class);
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), DppWidget.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
sendBroadcast(intent);

Работает для меня :)

26
ответ дан Voidcode 22 August 2018 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: