我正在尝试创建一个基于 LinearLayout 的小部件,该小部件将在每隔几分钟(由用户在配置活动中配置)后使用股票代码和价格刷新。
以下是我遵循的步骤:
1)在一个单独的进程中创建远程服务(我已经测试了服务并且工作正常) 2)按照下面的代码片段实现小部件。
我的问题是,应该如何设计从来自远程服务的数据中刷新自身的小部件?
(1)使用我的以下方法 - 从 TimerTask 启动/绑定到远程服务并每隔几分钟更新小部件(尝试测试它或每 5 秒仅用于测试目的......所以请耐心等待......不工作顺便一提)
(2)我是否应该简单地在我的应用程序小部件中声明自定义广播过滤器(因为它本质上是一个 BroadCastReceiver)并覆盖 onReceive 并从从远程服务接收到的意图的额外内容中发布数据(我的远程服务可以每 0 广播一次自定义意图第二)
什么是最好的选择?我试图搜索一个示例场景,其中有人遇到与我类似的问题,但找不到太多信息。
这是我的小部件的代码 -
// Author - Anand M
public class TestWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int i = 0; i < N; i++) {
// We have only one widget on Home Screen
int appWidgetId = appWidgetIds[i];
timer.scheduleAtFixedRate(new MyRefreshTimer(context, appWidgetManager, appWidgetId), 3000, 5000);
}
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
Log.d(LOGTAG, "onDeleted");
timer.cancel();
timer = null;
}
@Override
public void onEnabled(Context context) {
Log.d(LOGTAG, "onEnabled");
}
@Override
public void onDisabled(Context context) {
Log.d(LOGTAG, "onDisabled");
}
private class MyRefreshTimer extends TimerTask {
// Remote Service Interface declaration
// Connection to Remote Service
public MyRefreshTimer() {
// Initialize it here
// Start and Bind to Remote Service
}
public void run() {
// get data from Remote Service
// if the data received is not null then Push it to this widget
ComponentName thisWidget = new ComponentName(_ctx, TestWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(_ctx);
manager.updateAppWidget(thisWidget, remoteViews);
Intent myWidgetIntent = new Intent(_ctx, TestWidget.class);
myWidgetIntent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
_ctx.sendBroadcast(myWidgetIntent);
}
}
}
附加信息 :
(1)我已经声明了widget_provider布局,
(2) widget_provider_info 布局
(3)并将小部件声明为接收器(根据文档:URL:http://developer.android.com/guide/topics/appwidgets)。