Обновление виджетов из сервиса через RemoteViews - ОК на телефоне, не работает на эмуляторе - PullRequest
1 голос
/ 01 октября 2011

Я создал WidgetProvider и Сервис, который запускается в системе TIME_TICK - эта часть работает нормально, Сообщения журнала показывают, что Сервис работает AOK, и он отлично смотрится на реальном телефоне.

Для обновлениямои виджеты Я использую подобный код (отредактированный для ясности, чтобы он мог содержать опечатку)

    Log.d("xxx","Updating");
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
    views.setTextViewText(R.id.appwidget_text, "Some Text" + System.currentTimeMillis());
    ComponentName thisWidget = new ComponentName(context, SWClockWidgetProvider.class);
    AppWidgetManager manager = AppWidgetManager.getInstance(context);
    manager.updateAppWidget(thisWidget, views);

На моем телефоне (HTC Desire под управлением 2.2) все идеально, виджеты обновляются по минутам, каждый разминут.

В эмуляторе (работает 2.2) появляются сообщения журнала (например, служба работает), но виджеты не обновляются.

Теперь я вызываю этот код в 2 местах - из метода onUpdate провайдера (чтобы он помещал что-то в виджеты при их первом отображении) и из прослушивателя службы (для их обновления)

Теперь вот странный бит - в моем манифесте я первоначально объявил свой сервис следующим образом:

service android: name = ". SWClockWidgetService"

Когда я изменил это, чтобы явно упомянуть пакет(что, конечно же, идентично пакету провайдера)

служба android: name = "com.somewhatdog.swclockwidget.SWClockWidgetService"

первоначальное обновление (вызывается из провайдера onUpdate) работает НО последующеезвонки от слушателя Сервиса все еще не принимаются!?

Примечание: Первоначально я сделал Сервис внутренним классом провайдера, но он не работал на телефоне ИЛИ эмуляторе - не знаю, связано ли это ...

Во всяком случае - я озадачен - тот же Android на телефоне и эмуляторе - один работает, другой нет (что означает шансы этой работына других устройствах, по меньшей мере, капризно ??)

Я более чем немного потерян здесь - любой совет, оцените.

ps Я проверял это на эмуляторе под управлением 1.6 нетрадость - он работает на эмуляторе под управлением 2.1r1 и 2.3.3, так что кто знает ...

Ответы [ 2 ]

1 голос
/ 26 июня 2012

Обновление виджета эмулятора кажется немного хитрым. Есть две известные проблемы с ним:

  1. updateAppWidget(...) звонки могут работать только на эмуляторах, которые были перезапущены хотя бы один раз .
  2. Запуск более одного эмулятора одновременно может помешать обновлению виджета .
0 голосов
/ 06 октября 2011

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

Даже при развертывании нового кода существующие виджеты остаются неизменными!

Тестирование с использованием Androidx86 показывает, что проблема сводится кэмулятор, но я думаю, что вместо этого я буду использовать его для тестирования виджетов ...

...