2011-02-07 11 views
3

私は、アプリケーションのデータベースを変更する際に更新が必要なappwidgetを作成しています。私は何 :ブロードキャストはすべてのDB変更機能に送信する追加更新Android用ウィジェットのsendBroadcastの使用

<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> 
  • :AndroidManifestで

    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. : 1.作業ウィジェット 2.オーバーライドonReceiveメソッドを作成します

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

    しかし、DBを変更してもウィジェットは更新されません。 どうすればよいですか?

  • 答えて

    2

    ちょうどあなたのコードを見て推測するが、最初の後にそのスペースは「

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

    は思わ右... しかしもう一つ、たぶん私は、活動のために作られたテントと混合していますが、一度間違って見えますあなたは '新しいインテント(context、widget_provider.class);'新しいインテント(widget_provider.DATABASE_CHANGED); – codeScriber

    +0

    良い点...私はその最初の間違いの後でそれ以上は読んでいませんでした:-)。そこにはインテントをwidget_providerクラスに送信します。別の方法として、意図を送信せず、代わりにremoteviewsを更新してください – SteelBytes

    +0

    私には恥知らずです:)それは助けました。 – skkap