用远程服务的数据刷新简单的Android家庭小工具的最佳方式是什么



我正在尝试创建一个基于LinearLayout的Widget,它每隔几分钟就会用股票代码和价格刷新一次(可由用户在配置活动中进行配置)。

以下是我遵循的步骤:

1) 在一个单独的过程中创建远程服务(我已经测试了该服务,工作正常)2) 按照下面的代码片段实现Widget。

我的问题是,应该如何设计从来自远程服务的数据刷新其ellf的Widget

(1) 使用我下面的方法-从TimerTask启动/绑定到远程服务,每隔几分钟更新一次小部件(尝试测试它或每5秒更新一次,仅用于测试目的…所以请耐心等待……顺便说一句,不起作用)

(2) 我是否应该简单地在我的应用程序Widget中声明自定义广播过滤器(因为它本质上是一个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)。

  1. 在小部件类中实现LocalService
  2. 在Widget类中实现TimerTask
  3. 从TimerTask的run()方法启动LocalService
  4. LocalService将通过从远程服务获取数据来刷新小部件视图

相关内容

  • 没有找到相关文章

最新更新