请高手帮忙,数字时钟的小控件不更更新时间

myjie0527 2013-03-10 09:38:05
直接上代码
package com.mayj.app;

import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;

import android.text.format.DateFormat;
import android.util.Log;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

public class DigitClockWidgetProvider extends AppWidgetProvider{
private Calendar mCalendar;
private Locale mCurrentLocale;
private static RemoteViews views;
private static final ComponentName THIS_APPWIDGET =
new ComponentName("com.mayj.app", DigitClockWidgetProvider.class.getName());
String[]Weeks={
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
};
String[]Months={
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
};

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
//mContext=context;
// TODO Auto-generated method stub
defaultAppWidget(context, appWidgetManager, null);
}
private void defaultAppWidget(Context context,
AppWidgetManager appWidgetManager, int[] appWidgetIds) {
if(views==null){
views = new RemoteViews(context.getPackageName(),
R.layout.main);
}
mCalendar = Calendar.getInstance(TimeZone.getDefault());

mCalendar.setTimeInMillis(System.currentTimeMillis());

boolean b24 = DateFormat.is24HourFormat(context);
int year = mCalendar.get(Calendar.YEAR);
int month = mCalendar.get(Calendar.MONTH);
int date = mCalendar.get(Calendar.DATE);
int hour = mCalendar.get(Calendar.HOUR_OF_DAY);
int minute = mCalendar.get(Calendar.MINUTE);
int weeks = mCalendar.get(Calendar.DAY_OF_WEEK);

views.setTextViewText(R.id.date, String.valueOf(date)+",");
views.setTextViewText(R.id.month, Months[month]);
views.setTextViewText(R.id.weeks, Weeks[weeks-1]);
views.setTextViewText(R.id.hours, String.valueOf(hour));
views.setTextViewText(R.id.minutes, String.valueOf(minute));

System.out.println("defaultAppWidget ");
System.out.println("year= "+year);
System.out.println("month= "+month);
System.out.println("date= "+date);
System.out.println("hour= "+hour);
System.out.println("minute= "+minute);
System.out.println("weeks= "+weeks);

pushUpdate(context, appWidgetIds, views);
}
private void pushUpdate(Context context, int[] appWidgetIds, RemoteViews views) {
final AppWidgetManager gm = AppWidgetManager.getInstance(context);
if (appWidgetIds != null) {
gm.updateAppWidget(appWidgetIds, views);
} else {
gm.updateAppWidget(THIS_APPWIDGET, views);
}
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context,intent);
String action = intent.getAction();
if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {
String tz = intent.getStringExtra("time-zone");
mCalendar = Calendar.getInstance(TimeZone.getTimeZone(tz));
}
System.out.println("onReceive ");
System.out.println("action=:"+action);
updateAppWidget(context);
}
private void updateAppWidget(Context context) {
if(views==null){
views = new RemoteViews(context.getPackageName(),
R.layout.main);
}
mCalendar = Calendar.getInstance(TimeZone.getDefault());

mCalendar.setTimeInMillis(System.currentTimeMillis());

boolean b24 = DateFormat.is24HourFormat(context);
int year = mCalendar.get(Calendar.YEAR);
int month = mCalendar.get(Calendar.MONTH);
int date = mCalendar.get(Calendar.DATE);
int hour = mCalendar.get(Calendar.HOUR_OF_DAY);
int minute = mCalendar.get(Calendar.MINUTE);
int weeks = mCalendar.get(Calendar.DAY_OF_WEEK);

views.setTextViewText(R.id.date, String.valueOf(date)+",");
views.setTextViewText(R.id.month, Months[month]);
views.setTextViewText(R.id.weeks, Weeks[weeks-1]);
views.setTextViewText(R.id.hours, String.valueOf(hour));
views.setTextViewText(R.id.minutes, String.valueOf(minute));

final AppWidgetManager mAppWidgetManager = AppWidgetManager.getInstance(context);
int[] appIds = mAppWidgetManager.getAppWidgetIds(new ComponentName(
context, DigitClockWidgetProvider.class));
mAppWidgetManager.updateAppWidget(appIds, views);

}
}


styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="styleWindows">
<item name="android:singleLine">true</item>
<item name="android:textSize">22dip</item>
<item name="android:shadowColor">#BB000000</item>
<item name="android:shadowRadius">1.0</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textColor">#ffffffff</item>
<item name="android:textStyle">bold</item>
</style>
<style name="styleWindowsDatetime" parent="@style/styleWindows">
<item name="android:textSize">48dip</item>
</style>
</resources>

appwidget_provider.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="290dp"
android:minHeight="70dp"
android:updatePeriodMillis="2000"
android:initialLayout="@layout/main">
</appwidget-provider>


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mayj.app"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".DigitClockWidgetProvider">
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_provider"></meta-data>
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.DATE_CHANGED" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
</intent-filter>
</receiver>

</application>
</manifest>


main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="290dip"
android:layout_height="70dip"
>
<LinearLayout
android:id="@+id/LinearLayout01"
android:orientation="vertical"
android:layout_width="120dip"
android:layout_height="70dip">
<TextView
android:id="@+id/weeks"
style="@style/styleWindows"
android:layout_width="120dip"
android:layout_height="35dip"/>
<LinearLayout
android:id="@+id/LinearLayout04"
android:orientation="horizontal"
android:layout_width="120dip"
android:layout_height="35dip">
<TextView
android:id="@+id/date"
style="@style/styleWindows"
android:layout_width="40dip"
android:layout_height="35dip"/>
<TextView
android:id="@+id/month"
style="@style/styleWindows"
android:layout_width="80dip"
android:layout_height="35dip"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout02"
android:orientation="horizontal"
android:layout_marginLeft="40dip"
android:layout_width="130dip"
android:layout_height="70dip">
<TextView
android:id="@+id/hours"
style="@style/styleWindowsDatetime"
android:layout_width="60dip"
android:layout_height="70dip"/>
<TextView
android:text=":"
android:textSize="40dip"
android:shadowColor="#BB000000"
android:shadowRadius="1.0"
android:gravity="center_vertical"
android:textColor="#ffffffff"
android:textStyle="bold"
android:layout_width="10dip"
android:layout_height="70dip"/>
<TextView
android:id="@+id/minutes"
style="@style/styleWindowsDatetime"
android:layout_width="60dip"
android:layout_height="70dip"/>

</LinearLayout>
</LinearLayout>
...全文
87 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
myjie0527 2013-03-10
  • 打赏
  • 举报
回复
这个数字时钟小控件,为什么不能更新时间,请大牛帮忙,谢谢!

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧