Android Widget无法正确更新

时间:2015-01-26 20:12:28

标签: android widget

我正在使用模拟时钟小工具,其中包含Textview以显示日期编号。 它有效但日期(午夜之后)不会立即改变,它会在几分钟或几小时后改变。 我的更新周期是1000毫秒。 请帮助。

public class Clock_Actions extends AppWidgetProvider{


public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
      RemoteViews updateView = buildUpdate(context);
      appWidgetManager.updateAppWidget(appWidgetIds, updateView);
      super.onUpdate(context, appWidgetManager, appWidgetIds);
   }

private RemoteViews buildUpdate(Context context) {
      RemoteViews updateView = null;
      Time time = new Time();
      time.setToNow();
      updateView = new RemoteViews(context.getPackageName(), R.layout.main);
      updateView.setTextViewText(R.id.Date, new Integer(time.monthDay).toString());


      Intent launchIntent = new Intent();
      launchIntent.setComponent(new ComponentName("com.android.deskclock", "com.android.deskclock.DeskClock"));
      launchIntent.setAction(Intent.ACTION_MAIN);
      launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
      launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
      PendingIntent intent = PendingIntent.getActivity(context, 0, launchIntent, 0);
      updateView.setOnClickPendingIntent(R.id.analogClock2, intent);

      return updateView;
   }

}

1 个答案:

答案 0 :(得分:0)

首先,由于规范,Android并不会每30分钟拨打onUpdate不到1次,因此,1000毫秒无法正常工作。

其次,你正在做什么非常非常耗电,你的小部件会在这个刷新时间内耗尽你的电池,但要显示数据,时间等你必须使用TextClock

http://developer.android.com/reference/android/widget/TextClock.html

所以,相反,数据(我认为它是一个TextView)你应该写

<TextClock
android:id="@+id/Data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timeZone="GMT+0800"
android:format24Hour="MMM dd, yyyy k:mm"
android:format12Hour="MMM dd, yyyy k:mm" />

android:format24Hour和android:format12Hour与用户使用的数据格式有关,你可以通过格式定义你想看到的内容

http://developer.android.com/reference/java/text/DateFormat.html

TextClock不需要从代码更新,而且不是电池密集型