Android 从后台接收器更新的小部件

Android 从后台接收器更新的小部件,android,android-widget,Android,Android Widget,我是Android新手,所以每一件简单的事情都像一座山。 我正在实现一个应用程序,它(带有一个后台接收器)可以接听电话并做一些事情:这很有效,好吧。 我试图添加一个显示某些状态的小部件(从接收器更新),但这不起作用,小部件没有更新 这是我的小部件的一部分:当它启动时,它会显示正确的状态 public class BlacklistWidget extends AppWidgetProvider { RemoteViews remote; ComponentName provid

我是Android新手,所以每一件简单的事情都像一座山。
我正在实现一个应用程序,它(带有一个后台接收器)可以接听电话并做一些事情:这很有效,好吧。
我试图添加一个显示某些状态的小部件(从接收器更新),但这不起作用,小部件没有更新

这是我的小部件的一部分:当它启动时,它会显示正确的状态

public class BlacklistWidget extends AppWidgetProvider {

    RemoteViews remote;
    ComponentName provider;
    Context context;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);

        // create the remote view
        remote = new RemoteViews(context.getPackageName(), R.layout.widget);
        provider = new ComponentName(context, BlacklistWidget.class);

        this.context = context;

        Resources r = context.getResources();
        String[] usage_arr = r.getStringArray(R.array.pref_usage_array);
        int usage = Prefs.getUsage();
        Utils.Log("Widget onUpdate: " + usage);
        // remote.setImageViewResource(R.id.icon_usage,
        remote.setTextViewText(R.id.usage, usage_arr[usage]);

        appWidgetManager.updateAppWidget(provider, remote);
    }
}
当receiver更改静态类的状态时,将调用此方法:

public static void setUsage(int usage) {
    Usage = USAGE.values()[usage];

    try {
        Resources r = pcontext.getResources();
        String[] usage_arr = r.getStringArray(R.array.pref_usage_array);
        remoteViews.setTextViewText(R.id.usage, usage_arr[usage]);
        Utils.Log("Widget updated with " + usage);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
如您所见,用于更新小部件的代码与小部件更新()中包含的代码相同。
未引发异常,发送更新的文本正确。。但widget TextView保持不变

在清单中,小部件被定义为傻瓜:

<receiver android:name=".BlacklistWidget" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/widget_info" />
</receiver>

我做错了什么?
有没有更好的方法来实现我的目标?

非常感谢。

您在
setUsage
中所做的不足以更新小部件:您必须在更新
RemoteView
实例后调用
updateAppWidget
。调用
Utils.Log(“使用“+用法更新的小部件”)
您必须再次加载整个
remoteview
实例,设置所有适当的属性(包括您实际要更新的文本视图),然后调用
updateAppWidgetGet

非常感谢:添加
appWidgetManager.updateAppWidgetGet(提供程序,远程视图)
setUsage
的末尾完成工作!!!它在我的眼睛下,但我没有看到它。再次感谢