2011-11-27 3 views
1

Je viens de commencer à apprendre Android et j'ai écrit le code suivant suivi d'un tutoriel.Mise à jour widget Android toutes les 5 secondes

Ceci est la mise à jour de la zone de texte si vous cliquez dessus, mais je voudrais mettre à jour toutes les 30 secondes. Comment puis je faire ça? Je souhaite mesurer mon pouls et envoyer les données via Bluetooth. Si mon pouls est trop élevé, le widget me prévient (son). Quelle est la meilleure façon de gérer cela, je voudrais vérifier cela dans chaque 15 secondes. Quel est le moyen le plus efficace?

package com.test; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

import com.test.R; 

import android.app.PendingIntent; 
import android.app.Service; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.RemoteViews; 
import android.widget.Toast; 

public class WidgetActivity extends AppWidgetProvider { 
    public static WidgetActivity Widgetke = null; 
    public static Context context; 
    public static AppWidgetManager appWidgetManager; 
    public static int appWidgetIds[]; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
     if (null == context) context = WidgetActivity.context; 
     if (null == appWidgetManager) appWidgetManager = WidgetActivity.appWidgetManager; 
     if (null == appWidgetIds) appWidgetIds = WidgetActivity.appWidgetIds; 

     WidgetActivity.Widgetke = this; 
     WidgetActivity.context = context; 
     WidgetActivity.appWidgetManager = appWidgetManager; 
     WidgetActivity.appWidgetIds = appWidgetIds; 

     Log.i("PXR", "onUpdate"); 

     final int N = appWidgetIds.length; 
     for (int i=0; i<N; i++) { 
      int appWidgetId = appWidgetIds[i]; 

      updateAppWidget(context,appWidgetManager, appWidgetId);    
     } 

    } 


    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, 
      int appWidgetId) { 

     DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault()); 
     CharSequence text = "Time: " + format.format(new Date()); 

     Intent intent = new Intent(context, UpdateService.class); 
     PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); 

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); 
     remoteViews.setOnClickPendingIntent(R.id.mainlayout, pendingIntent); 

     remoteViews.setTextViewText(R.id.test_out, text); 

     // Tell the widget manager 
     appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 
    } 

    public static class UpdateService extends Service { 
     @Override 
     public void onStart(Intent intent, int startId) { 
      WidgetActivity.Widgetke.onUpdate(context, appWidgetManager, appWidgetIds); 
      Toast.makeText(context, "Update Widget", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public IBinder onBind(Intent arg0) { 
      return null; 
     } 
    } 

} 

Répondre

2

Vous pouvez démarrer un nouveau thread et utiliser une boucle for (;;) avec un sleep. Vous pouvez mettre à jour l'interface utilisateur à l'aide d'un gestionnaire (android.os.Handler) à partir de là: http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/

Alternativement, use a timer.

+0

Ce lien donne 404 ERREUR pouvez-vous donner une idée sur cet article ou le code qui est dans cela, donc il peut être utile pour moi d'aller de l'avant dans la mise en œuvre du widget. –

+0

@SteveDesai: J'ai corrigé le lien –

+0

Merci de modifier la réponse :) –

Questions connexes