首先新建一个Floder文件夹叫xml然后建一个appconfig.xml主要信息如下
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/activity_widget"
android:minHeight="40dp" 这里指的是最低高度
android:minWidth="100dp" 这里指最低宽度
android:updatePeriodMillis="86400000" > 这里是多久刷新一次秒
</appwidget-provider>
其次跟大家说下AppWidgetManager这个类
查看API知道主要方法有
onDeleted() Widget被从屏幕移除
onDisabled()
onEnabled()
onReceive()
@Overridepublic void onDisabled(Context context) {
// 最后一个wdiget从屏幕中移除
super.onDisabled(context);
context.stopService(new Intent(context,TimerService.class));
}
@Override
public void onEnabled(Context context) {
// 添加widget到屏幕
super.onEnabled(context);
context.startService(new Intent(context, TimerService.class));
然后创建一个TimerService用来执行后台的时间刷新
package com.weixin.service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import com.weixin.R;
import com.weixin.widget.WidgetProvider;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews;
public class TimerService extends Service {
private static final String TAG = "TimeService";
private Timer timer=null;
//时间格式化类
private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
//初始化
super.onCreate();
timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
updateViews();
}
//1秒刷新一次
}, 0, 1000);
Log.i(TAG, "---onCreate----");
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "---onDestory----");
timer=null;
}
private void updateViews() {
// 将时间转字符串格式
String time=sdf.format(new Date());
RemoteViews rv=new RemoteViews(getPackageName(),R.layout.activity_widget);
//显示事件的TextView
rv.setTextViewText(R.id.tv_widget, time);
//获取桌面小组件的实例
AppWidgetManager manager=AppWidgetManager.getInstance(getApplicationContext());
//组件的名称
ComponentName cn=new ComponentName(getApplicationContext(), WidgetProvider.class);
//更新组件
manager.updateAppWidget(cn, rv);
}
}
最后别忘记在Androidmainfest.xml里面配置Service和WidgetProvider信息
<receiver android:name="com.weixin.widget.WidgetProvider" > <--自定义的WidgetProvider-->
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appconfig" />
</receiver>
<service android:name="com.weixin.service.TimerService" >
</service>