使用sendBroadcast更新android小部件

使用sendBroadcast更新android小部件,android,android-widget,android-intent,Android,Android Widget,Android Intent,我正在创建一个appwidget,当应用程序的数据库发生变化时,它需要更新。 我所做的: 1.创建工作小部件 2.重写onReceive方法: public static final String DATABASE_CHANGED = " utimetable.DATABASE_CHANGED"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAct

我正在创建一个appwidget,当应用程序的数据库发生变化时,它需要更新。 我所做的: 1.创建工作小部件 2.重写onReceive方法:

public static final String DATABASE_CHANGED = " utimetable.DATABASE_CHANGED";
@Override
public void onReceive(Context context, Intent intent) 
{
    String action = intent.getAction();
    if (action.equals(DATABASE_CHANGED) || action.equals(Intent.ACTION_DATE_CHANGED)) 
    {
        AppWidgetManager gm = AppWidgetManager.getInstance(context);
        int[] ids = gm.getAppWidgetIds(new ComponentName(context, widget_provider.class));
        this.onUpdate(context, gm, ids);            
    }
    else 
    {
        super.onReceive(context, intent);
    }
}
  • 在AndroidManifest中:

        <receiver android:name=".widget_provider" android:label="@string/widget_today_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action android:name="utimetable.DATABASE_CHANGED" />
            <action android:name="android.intent.action.DATE_CHANGED" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_row" />
    </receiver>
    

  • 但当我在DB中进行更改时,小部件仍然没有更新。
    我该怎么办?

    只是猜测代码,但第一个“后的空格”看起来是错误的

    .... DATABASE_CHANGED = " utimetable.DATABASE_CHANGED";
    

    似乎是对的…但是还有一件事,也许我在混合活动的意图,但是一旦你写了“新意图(上下文,widget\u provider.class)”,你将只把意图发送给widget\u provider类…尝试删除它并使用:新意图(widget\u provider.DATABASE\u CHANGED);说得好……在第一个错误之后,我没有进一步阅读:-)。还有另一种方法,不要发送意图,只需更新RemoteView即可
    .... DATABASE_CHANGED = " utimetable.DATABASE_CHANGED";