Android 小部件未正确更新
Android Widget don't update correctly
我正在开发 Analog Clock Widget,其中包括一个 Textview
来显示日期数字。
它有效,但日期(午夜后)不会立即更改,它会在几分钟或几小时后更改。
我的更新周期是 1000ms。
请帮助。
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;
}
}
首先,根据规范,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 不需要从代码更新,也不是电池密集型
我正在开发 Analog Clock Widget,其中包括一个 Textview
来显示日期数字。
它有效,但日期(午夜后)不会立即更改,它会在几分钟或几小时后更改。
我的更新周期是 1000ms。
请帮助。
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;
}
}
首先,根据规范,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 不需要从代码更新,也不是电池密集型