#android #service #emulation #widget #remoteview
#Android #Обслуживание #эмуляция #виджет #remoteview
Вопрос:
Я создал WidgetProvider и службу, которая запускается при системном TIME_TICK — эта часть работает нормально, сообщения журнала показывают, что служба работает нормально, и она отлично смотрится на реальном телефоне.
Для обновления своих виджетов я использую такой код (отредактирован для наглядности, поэтому в нем может быть опечатка)
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 поставщика (чтобы он помещал что-то в виджеты при их первом отображении) и из прослушивателя службы (для их обновления)
Теперь вот что странно — в моем манифесте я изначально объявил свой сервис следующим образом
служба android: name =».SWClockWidgetService»
Когда я изменил это, чтобы явно указать пакет (который, конечно, идентичен пакету провайдера)
служба android: name =»com.somewhatdog.swclockwidget.SWClockWidgetService»
первоначальное обновление (вызываемое поставщиком onUpdate) работает, НО последующие вызовы от слушателя службы по-прежнему не работают !?
Примечание: Первоначально я сделал службу внутренним классом провайдера, но это не работало на телефоне ИЛИ эмуляторе — понятия не имею, связано ли это…
В любом случае — я озадачен — тот же Android на телефоне и эмуляторе — один работает, другой нет (что означает, что шансы на то, что это сработает на других устройствах, мягко говоря, капризны ??)
Я здесь более чем немного потерян — любой совет приветствуется.
p.s. Я тестировал это на эмуляторе под управлением 1.6 без радости — он работает на эмуляторе под управлением 2.1r1 и 2.3.3 tho, так что кто знает…
Комментарии:
1. Я знаю, что уже поздно, но просто хочу сообщить вам, что теперь вы можете работать с виджетами на эмуляторе под названием Genymotion, он работает довольно хорошо.
Ответ №1:
Обновление виджета эмулятора кажется немного запутанным. С этим связаны две известные проблемы:
updateAppWidget(...)
вызовы могут работать только на эмуляторах, которые были перезапущены хотя бы один раз.- Одновременный запуск более одного эмулятора может помешать обновлению виджета.
Ответ №2:
Дальнейшие эксперименты показывают, что обновление виджетов в эмуляторе просто не работает.
Даже если вы развернете новый код, существующие виджеты останутся неизменными!
Тестирование с использованием Androidx86 предполагает, что проблема связана с эмулятором, поэтому я думаю, что вместо этого я буду использовать это для тестирования виджетов…