从onReceive方法而不是onUpdate更改Android Widget上的TextView

时间:2016-01-21 01:38:11

标签: android android-widget android-service android-broadcast

我正在开发一个运行服务的应用程序,该服务定期发送有关其当前状态的广播。我的AppWidgetProvider使用onReceive方法收到了这些广播:

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if (intent.getAction().equals(ACTION_STATUS_CHANGED)) {
        Bundle b = intent.getBundleExtra("updateInfo");
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_app_control);
        // Doesn't work for some reason
        views.setTextViewText(R.id.informationTextView, b.getString(MyService.BIT_OF_INFORMATION));

        // Update widgets
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, AppControlWidgetProvider.class));
        this.onUpdate(context, appWidgetManager, appWidgetIds);
    }
}

但是,即使我已将调用添加到onUpdate,但要使用setTextViewText设置的新文本也无法使用实际的小部件。如果我创建了捆绑包,我将可用的信息提供给整个类的实例(将其保存在属性中,以便进行测试)并从内部对setTextViewText进行完全相同的调用onUpdate方法,TextView按预期更新。

到目前为止,我已经在某种程度上浏览了有关此主题的SO,但在其他地方设置TextView文本的onReceive文字的方式与我做的完全相同它(除非我错过了某些东西,似乎是完美的)。

0 个答案:

没有答案