我目前正在学习

Android中的小部件.

我想创建一个将显示SSID(RSSI(Signal))级别的WIFI小部件.

但是我也希望能够从我正在运行的服务发送数据,通过wifi计算声音的质量.

这是我读过的一些简短的教程之后:

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);

}

}

以上似乎工作正常,它每10秒钟更新小部件上的SSID.

然而,从我的服务获取已经运行的信息的最有效的方式是什么?

还有更好的方法来更新小部件,而不是使用定时器和时间戳? (避免投票)

UPDATE

根据Karan的建议,我在我的服务中添加了以下代码:

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,任何想法为什么?

编辑

得到它的工作,谢谢卡兰

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐