В настоящее время я изучаю виджеты в Android.
Я хочу создать виджет WIFI, который будет отображать SSID, уровень RSSI (сигнал).
Но я также хочу иметь возможность отправлять ему данные из службы, которую я использую, которая рассчитывает качество звука по Wi-Fi.
Вот что я имею после прочтения и быстрого урока:
public class WlanWidget extends AppWidgetProvider{
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
WifiManager wifiManager;
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new WlanTimer(context, appWidgetManager), 1, 10000);
}
private class WlanTimer extends TimerTask{
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
public WlanTimer(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
thisWidget = new ComponentName(context, WlanWidget.class);
wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
}
@Override
public void run() {
remoteViews.setTextViewText(R.id.widget_textview,
wifiManager.getConnectionInfo().getSSID());
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
Сказанное выше работает нормально, оно обновляет SSID на виджете каждые 10 секунд.
Однако, каков наиболее эффективный способ получения информации от моего сервиса, которая уже будет периодически обновляться на моем виджете?
Также есть ли лучший подход к обновлению виджета, чем использование таймера и таймера? (Избегайте опроса)
UPDATE
В соответствии с предложением Карана я добавил следующий код в мою Службу:
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
ComponentName thisWidget = new ComponentName( context, WlanWidget.class );
remoteViews.setTextViewText(R.id.widget_QCLevel, " " + qcPercentage);
AppWidgetManager.getInstance( context ).updateAppWidget( thisWidget, remoteViews );
Это запускается каждый раз, когда изменяется уровень RSSI, но все равно никогда не обновляет TextView на моем виджете, есть идеи, почему?
EDIT
Получилось, спасибо Каран