我的Android小部件没有更新日期。
它是一个只有日期的小部件,不再是了。
package com.android.widget;
import java.util.Timer;
import java.util.TimerTask;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;
public class MyCalendarWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1,
1000);
}
private class MyTime extends TimerTask {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
Fecha fec = new Fecha();
public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
thisWidget = new ComponentName(context, MyCalendarWidget.class);
}
@Override
public void run() {
remoteViews.setTextViewText(R.id.widget_textview, fec.DiaActual(false)+"\r\n"
+fec.DiaActual(true) +" de "
+fec.MesActual(false)+" de "
+fec.AñoActualNumerico());
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
}发布于 2014-02-20 22:39:20
请先阅读文档,AppWidget指南和AppWidgetProvider。这就解释了:
我关于您的更新没有发生的假设是,当提供程序完成对某个意图的响应时,操作系统会停止您的小部件提供程序的组件。您可以通过Log.d()验证这一假设。
您可以注册一个滴答广播,该广播可以告诉您时间何时变化,每分钟一次。做测试,它没有运行时,电话睡觉(例如,保持一个电话计数),并在这里随时报告。
添加了--在实践中显示日期(并每天更新一次)要比显示日期+时间(并每分钟更新一次;您的问题代码尝试每秒更新一次)容易得多,并且无需使用大量电池电源就可以做到这一点。
updatePeriodMillis="0"。<action android:name="android.intent.action.DATE_CHANGED"/>添加到AndroidManifest.xml中的小部件提供程序的<intent-filter>中。DateUtils.formatDateTime()格式化日期。是的,如果时钟向后调整,错误code.google.com/p/android/issues/detail?id=2880就会发生。
https://stackoverflow.com/questions/21910048
复制相似问题