В настоящее время я изучаю виджеты в Android.
Я хочу создать виджет WIFI, который отобразит SSID, уровень RSSI (Signal).
Но я также хочу иметь возможность отправлять данные из службы, которую я запускаю, которая вычисляет качество звука через 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 секунд.
Однако каков наиболее эффективный способ получить информацию из моей службы, которая уже будет выполняться для периодического обновления моего виджета?
Также есть лучший подход к обновлению виджета, а не к использованию таймера и timertask? (Избегайте опроса)
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 на моем виджете, любые идеи, почему?
ИЗМЕНИТЬ
Получил работу, спасибо Karan