2013-03-10 4 views
0

я в настоящее время есть виджет, который использует два setTextViewText:Update Widget Периодически Каждый второй

общественный класс ЭЛЕКТРОННЫЕ ЧАСЫ расширяет AppWidgetProvider {

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

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.digitalclock); 

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

     views.setOnClickPendingIntent(R.id.rl, pendingIntent); 
     java.util.Date noteTS = Calendar.getInstance().getTime(); 
     String time = "kk:mm"; 
     String date = "dd MMMMM yyyy"; 

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

     appWidgetManager.updateAppWidget(appWidgetId, views); 


    } 

} 
} 

Мой вопрос, как я могу использовать это, чтобы установить два TextView каждую секунду так что время обновления вместо 30 минут, что позволяет appwidgetprovider? Я слышал об использовании AlarmManager, используя service, handler .... Проблема в том, что это не ясно, или дать примеры того, как я буду заниматься этим.

Так что, если кто-нибудь имеет ясный путь для достижения этой цели я очень ценю это благодаря

+0

Вы действительно не должны обновлять виджет приложения каждую секунду. Каждое обновление виджета приложения относительно дорого, и каждый раз каждый раз это означает, что ваш процесс будет постоянно находиться в памяти. Для повышения эффективности часы лучше всего реализуются как функции самого домашнего экрана. – CommonsWare

ответ

3

Вы могли бы иметь некоторые службы работают в фоновом режиме. Отправляйте широковещательное сообщение от этой службы или активности к классу, который расширяет AppWidgetProvider (в устном случае DigitalClock), а затем переопределяет функцию onReceive() того же класса.

Шаг 1: Передача трансляции из службы или где-то еще.

Шаг 2: добавьте функцию onReceive() в уроке класса DigitalClock.

public class DigitalClock extends AppWidgetProvider { 


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

     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.digitalclock); 

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

      views.setOnClickPendingIntent(R.id.rl, pendingIntent); 
      java.util.Date noteTS = Calendar.getInstance().getTime(); 
      String time = "kk:mm"; 
      String date = "dd MMMMM yyyy"; 

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

      appWidgetManager.updateAppWidget(appWidgetId, views); 


     } 

    } 
    @Override 
     public void onReceive(Context context, Intent intent) { 


       super.onReceive(context, intent); 
//Do your task here like updating the textviews 
} 

    } 
Смежные вопросы