Le système envoie un événement de diffusion au début exact de chaque minute en fonction de l'horloge système. Créer un service avec votre widget et faire quelque chose comme ceci:
BroadcastReceiver _broadcastReceiver;
private final SimpleDateFormat _sdfWatchTime = new SimpleDateFormat("HH:mm");
private TextView _tvTime;
@Override
public void onStart() {
super.onStart();
_broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
if (intent.getAction().compareTo(Intent.ACTION_TIME_TICK) == 0)
_tvTime.setText(_sdfWatchTime.format(new Date()));
}
};
registerReceiver(_broadcastReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
}
@Override
public void onStop() {
super.onStop();
if (_broadcastReceiver != null)
unregisterReceiver(_broadcastReceiver);
}
Ne pas oublier cependant d'initialiser votre TextView au préalable (à l'heure du système actuel) car il est probable que vous sauteront votre interface utilisateur au milieu d'une minute et le TextView ne sera pas mis à jour jusqu'à la prochaine minute.
Vous ne pouvez pas insérer des threads en toute sécurité à partir d'un 'AppWidgetProvider' ou d'un autre 'BroadcastReceiver'. S'il vous plaît ne faites pas cela. – CommonsWare