2011-11-27 100 views
1

我刚开始学习Android,并按照教程编写了以下代码。每5秒更新一次Android小部件

这是更新textarea,如果点击它,但我想每30秒更新一次。我怎样才能做到这一点?

我想测量我的脉搏并通过蓝牙发送数据。如果我的脉搏高于小部件警告我(声音)。什么是管理这个最好的方法,我想每15秒检查一次。什么是最有效的方法?

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; 
     } 
    } 

} 

回答

2

您可以启动一个新线程并使用for(;;)循环与睡眠。您可以使用Handler(android.os.Handler)从那里更新UI:http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/

或者,use a timer

+0

这个链接给404错误你能给出关于这篇文章或代码的想法,因此它可以有助于我在小部件实施中继续前进。 –

+0

@SteveDesai:我修复了链接 –

+0

感谢编辑回答:) –