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.作業ウィジェット 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を変更してもウィジェットは更新されません。 どうすればよいですか?
は思わ右... しかしもう一つ、たぶん私は、活動のために作られたテントと混合していますが、一度間違って見えますあなたは '新しいインテント(context、widget_provider.class);'新しいインテント(widget_provider.DATABASE_CHANGED); – codeScriber
良い点...私はその最初の間違いの後でそれ以上は読んでいませんでした:-)。そこにはインテントをwidget_providerクラスに送信します。別の方法として、意図を送信せず、代わりにremoteviewsを更新してください – SteelBytes
私には恥知らずです:)それは助けました。 – skkap