2011-02-07 107 views
3

我正在创建一个appwidget,当应用程序的数据库发生某些更改时需要更新。 我做什么: 1.创建工作部件 2.覆盖的onReceive方法:使用sendBroadcast更新Android窗口小部件

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); 
    } 
} 
  1. 在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> 
    
  2. 增加广播发送到所有DB转变职能:

    public static void sendUpdateIntent(Context context) 
    { 
        Intent i = new Intent(context, widget_provider.class); 
        i.setAction(widget_provider.DATABASE_CHANGED); 
        context.sendBroadcast(i); 
    } 
    

但是当我在数据库中进行更改时,小部件仍未更新。 我该怎么办?

回答

2

只是猜测在看你的代码,但第一后空间“看起来错

.... DATABASE_CHANGED = " utimetable.DATABASE_CHANGED"; 
+0

似乎是正确的......然而 一两件事,也许我与活动所取得的Intent混合,但一旦你写'新的意图(上下文,widget_provider.class);'你只会将意图发送给widget_provider类...尝试删除它并使用:new Intent(widget_provider.DATABASE_CHANGED); – codeScriber 2011-02-07 15:18:43