如何动态更新 Widget(无需等待 30 分钟 onUpdate 被调用)?

2024-01-05

我目前正在学习 Android 中的小部件。

我想创建一个 WIFI 小部件来显示 SSID、RSSI(信号)级别。

但我也希望能够从我正在运行的通过 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

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


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

成功了,谢谢卡兰


您可以使用以下代码来更新 widget 的数据:

ComponentName thisWidget = new ComponentName( getContext(), <ProviderClass> );
AppWidgetManager.getInstance( getContext() ).updateAppWidget( thisWidget, rempoteViews );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何动态更新 Widget(无需等待 30 分钟 onUpdate 被调用)? 的相关文章

随机推荐