Je veux implémenter un CountDownTimer dans un widget. Voici ce que j'ai trouvé :
import android.content.Intent;
import android.os.CountDownTimer;
import android.widget.RemoteViews;
import android.widget.TextView;
public class CountDown extends CountDownTimer {
private RemoteViews views;
public CountDown(long millisInFuture, int countDownInterval, RemoteViews views) {
super(millisInFuture, countDownInterval);
this.views = views;
}
@Override
public void onFinish() {
}
@Override
public void onTick(long millisUntilFinished) {
int days = (int) (millisUntilFinished / (1000 * 60 * 60 * 24));
views.setTextViewText(R.id.countWidget, days);
}
}
Et la classe AppWidgetProvider
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
import android.widget.TextView;
public class CountDownWidgetProvider extends AppWidgetProvider {
private Calendar currentDate = Calendar.getInstance();
private Calendar firstDecember = Calendar.getInstance();
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Date date = new Date();
this.firstDecember.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
this.currentDate.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
this.firstDecember.set(2012, 11, 1, 0, 0, 0); // TODO: Set to December
this.currentDate.setTime(date);
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch MainActivity
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.count_down_app_widget);
views.setOnClickPendingIntent(R.id.countWidget, pendingIntent);
long millis = this.firstDecember.getTimeInMillis() - this.currentDate.getTimeInMillis();
CountDown countDown = new CountDown(millis, 1000, views);
countDown.start();
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
Mais cela ne fonctionne pas de cette façon. Le widget TextView ne se rafraîchit pas et ne change même pas. Il semble que le CountDown ne démarre pas.
J'ai peut-être fait une erreur quelque part, mais je suis novice en matière de développement Android, alors j'ai pensé que vous pourriez m'aider.