Ich habe eine Widget-Klasse (Erweiterung AppWidgetProvider), die nur eine Ansicht (ImageView) im Widget-Layout hat. Wenn der Benutzer auf das Widget klickt, wird eine Aktivität ohne Probleme aktualisiert und gestartet. Außerdem wird das Widget alle 30 Minuten aktualisiert und die Aktivität wird nach der Aktualisierung des Widgets gestartet. Mein Problem ist: Wie kann ich das Widget so konfigurieren, dass es sich nur aktualisiert, wenn es automatisch aktualisiert wird (nicht durch Klicken des Benutzers)?Verwenden Sie zwei PendingIntent in einer Ansicht in Appwidget
Hier ist mein Code:
public class Widget extends AppWidgetProvider {
private static final String ACTION_UPDATE = AppWidgetManager.ACTION_APPWIDGET_UPDATE;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
ComponentName cn = new ComponentName(context, Widget.class);
appWidgetManager.updateAppWidget(cn, remoteView(context));
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) {
ComponentName cn = new ComponentName(context, Widget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn,
remoteView(context));
Intent launch = new Intent(context, Main.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0);
try {
pi.send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
}
private RemoteViews remoteView(Context ctx) {
ArrayList<Integer> imageId = new ArrayList<Integer>();
for (int i = 1; i <= 30; i++) {
int drawableImageId = ctx.getResources().getIdentifier("image" + i,
"drawable", ctx.getPackageName());
imageId.add(drawableImageId);
}
RemoteViews rv = new RemoteViews(ctx.getPackageName(), R.layout.widget);
Calendar todayDate = Calendar.getInstance();
todayDate.setTimeInMillis(System.currentTimeMillis());
Calendar startDate = Calendar.getInstance();
startDate.set(2014, 05, 15);
int dayDiffer = Helper.getDiffernce(todayDate, startDate);
dayDiffer += 1;
if (dayDiffer >= 1 && dayDiffer <= 30) {
rv.setInt(R.id.img_widget, "setImageResource",
imageId.get(dayDiffer - 1));
T(ctx, "in >> " + dayDiffer);
} else if (dayDiffer >= 0) {
T(ctx, "before >> " + dayDiffer);
} else if (dayDiffer <= 31) {
T(ctx, "after >> " + dayDiffer);
}
Intent update = new Intent(ctx, Widget.class);
update.setAction(ACTION_UPDATE);
PendingIntent pi_update = PendingIntent.getBroadcast(ctx, 0, update, 0);
rv.setOnClickPendingIntent(R.id.img_widget, pi_update);
return rv;
}
public void T(Context context, String string) {
Toast.makeText(context, string, Toast.LENGTH_SHORT).show();
}
}
Danke, ja, es war die beste Lösung, die ich bekommen habe, aber vergessen, darüber hier zu erzählen. –