1

我有一個小部件顯示了一個使用TextView的數字時鐘,在這個小部件中我想更新的頻率比xml中允許的30分鐘更頻繁。我看過一些例子,但是像某人一樣幫助我解決特定問題。該小部件配置正確,工作正常,但不會更新,因爲它應該是數字時鐘。小部件上的TextView不能使用OnUpdate方法更新

public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 

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

     Intent clockIntent = new Intent(context, DeskClock.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
       clockIntent, 0); 

     RemoteViews views = new RemoteViews(context.getPackageName(), 
       R.layout.digitalclock); 
     views.setOnClickPendingIntent(R.id.gl, pendingIntent); 

     java.util.Date noteTS = Calendar.getInstance().getTime(); 

     String time = "kk:mm"; 
     views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS)); 

     String date = "dd MMMMM yyyy"; 
     views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS)); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 
} 

的XML安卓僅updateperiodmills每30分鐘更新,但我需要更新或至少每秒設置TextView的像香港專業教育學院使用的主要的應用程序運行方法來完成。任何幫助,非常感激。由於

編輯

public class DigitalClock extends AppWidgetProvider { 

public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 

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

     Intent clockIntent = new Intent(context, DeskClock.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
       clockIntent, 0); 

     final RemoteViews views = new RemoteViews(context.getPackageName(), 
       R.layout.digitalclock); 
     views.setOnClickPendingIntent(R.id.gl, pendingIntent); 

     final java.util.Date noteTS = Calendar.getInstance().getTime(); 
     final String time = "kk:mm"; 
     final String date = "dd MMMMM yyyy"; 


     BroadcastReceiver mBroadcastTime = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 

       views.setTextViewText(R.id.tvTime, 
         DateFormat.format(time, noteTS)); 

       views.setTextViewText(R.id.tvDate, 
         DateFormat.format(date, noteTS)); 
      } 
     }; 

     IntentFilter mTime = new IntentFilter(Intent.ACTION_TIME_TICK); 
     registerReceiver(mBroadcastTime, mTime); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 
} 

private void registerReceiver(BroadcastReceiver mBroadcastTime, 
     IntentFilter mTime) { 

} 
} 

這是現在我的課,但我不得不添加此方法:

private void registerReceiver(BroadcastReceiver mBroadcastTime, 
     IntentFilter mTime) { 

} 

我該怎麼辦呢?

回答

0

您可以註冊BroadcastReceiver並監聽ACTION_TIME_TICK操作。

這將會每分鐘調用一次。

BroadcastReceiver mBroadcastTime = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Change the time on your widget 
     } 
    }; 

IntentFilter mTime = new IntentFilter(Intent.ACTION_TIME_TICK); 
registerReceiver(mBroadcastTime, mTime); 
+0

感謝您的幫助,但它希望我創建一個方法?不知道我該怎麼處理它..? – Timmo 2013-02-18 16:45:29

0

您必須使用AlaramManager才能實現此功能。

我在以下方式中使用我的時鐘小部件。

倒計時alaram:

class CountSecond extends CountDownTimer 
     { 
      public CountSecond(long millisInFuture, long countDownInterval) { 
       super(millisInFuture, countDownInterval); 
       // TODO Auto-generated constructor stub 

       Intent intent = new Intent(ClockWidget.CLOCK_WIDGET_UPDATE); 
       intent.putExtra("theme", SelectedTheme); 
       sendBroadcast(intent); 
      } 

      @Override 
      public void onFinish() { 
       // TODO Auto-generated method stub 
       Log.d("CL1 Service ","--- count finish "); 
       //setTimertoUpdate(); 


       AlarmManager alarmManager = (AlarmManager)ClockWidgetSetting.this.getSystemService(Context.ALARM_SERVICE); 
       Calendar calendar = Calendar.getInstance(); 
       calendar.setTimeInMillis(System.currentTimeMillis()); 
       //calendar.add(Calendar.MINUTE, 1); 
       alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 60000, createClockTickIntent(ClockWidgetSetting.this)); 
       //finish(); 

      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
       // TODO Auto-generated method stub 
      } 

     } 

和意圖調用插件的appwidgetprovider如下所示。因此,小部件的onUpdate()將被調用。

private PendingIntent createClockTickIntent(Context context) { 
      Intent intent = new Intent(ClockWidget.CLOCK_WIDGET_UPDATE); 
      intent.putExtra("theme", SelectedTheme); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      return pendingIntent; 
     } 
+0

@ timmo15檢查我的答案,並通知我這是否有助於您。 – Rahil2952 2013-02-20 05:21:55

+0

感謝@ Rahil2952的幫助,但是我得到了很多錯誤,並且你的班級藥劑師爲我工作。我看看AlarmManager的方法,看看我能找到什麼.. – Timmo 2013-02-20 16:22:55