AppWidget之应用入门[实时更新系统当前时间]
ShowTimeNowAppWidget
package
com.zhy.shortcut;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.RemoteViews;
public class ShowTimeNowAppWidget extends AppWidgetProvider {
private static final String TAG = " ShowTimeNowAppWidget " ;
Handler handler;
AppWidgetManager widgetManager;
RemoteViews remoteViews;
Context context;
@Override
public void onDeleted(Context context, int [] appWidgetIds) {
super .onDeleted(context, appWidgetIds);
Log.d(TAG, " ---------onDeleted---------- " );
}
@Override
public void onDisabled(Context context) {
super .onDisabled(context);
Log.d(TAG, " ---------onDisabled---------- " );
}
@Override
public void onEnabled(Context context) {
super .onEnabled(context);
Log.d(TAG, " ---------onEnabled---------- " );
}
@Override
public void onReceive(Context context, Intent intent) {
super .onReceive(context, intent);
Log.d(TAG, " ---------onReceive---------- " );
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int [] appWidgetIds) {
super .onUpdate(context, appWidgetManager, appWidgetIds);
this .context = context;
final int appWidgetId = appWidgetIds[ 0 ];
// 创建一个RemoteViews
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widgetlayout);
widgetManager = appWidgetManager;
remoteViews = views;
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super .handleMessage(msg);
switch (msg.what) {
case 0 :
// ComponentName component=new ComponentName(ShowTimeNowAppWidget.this.context, ShowTimeNowAppWidget.class);
// 更新widget上TextView控件的内容
remoteViews.setTextViewText(R.id.widget_time, String.valueOf(msg.obj));
// 更新widget
widgetManager.updateAppWidget(appWidgetId, remoteViews);
break ;
default :
break ;
}
}
};
handler.post( new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what = 0 ;
message.obj = new SimpleDateFormat( " yyyy年MM月dd日 HH:mm:ss " ).format( new Date());
handler.sendMessage(message);
handler.postDelayed( this , 1000 );
}
});
Log.d(TAG, " ---------onUpdate---------- " );
}
}
widgetlayout布局文件
import java.text.SimpleDateFormat;
import java.util.Date;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.RemoteViews;
public class ShowTimeNowAppWidget extends AppWidgetProvider {
private static final String TAG = " ShowTimeNowAppWidget " ;
Handler handler;
AppWidgetManager widgetManager;
RemoteViews remoteViews;
Context context;
@Override
public void onDeleted(Context context, int [] appWidgetIds) {
super .onDeleted(context, appWidgetIds);
Log.d(TAG, " ---------onDeleted---------- " );
}
@Override
public void onDisabled(Context context) {
super .onDisabled(context);
Log.d(TAG, " ---------onDisabled---------- " );
}
@Override
public void onEnabled(Context context) {
super .onEnabled(context);
Log.d(TAG, " ---------onEnabled---------- " );
}
@Override
public void onReceive(Context context, Intent intent) {
super .onReceive(context, intent);
Log.d(TAG, " ---------onReceive---------- " );
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int [] appWidgetIds) {
super .onUpdate(context, appWidgetManager, appWidgetIds);
this .context = context;
final int appWidgetId = appWidgetIds[ 0 ];
// 创建一个RemoteViews
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widgetlayout);
widgetManager = appWidgetManager;
remoteViews = views;
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super .handleMessage(msg);
switch (msg.what) {
case 0 :
// ComponentName component=new ComponentName(ShowTimeNowAppWidget.this.context, ShowTimeNowAppWidget.class);
// 更新widget上TextView控件的内容
remoteViews.setTextViewText(R.id.widget_time, String.valueOf(msg.obj));
// 更新widget
widgetManager.updateAppWidget(appWidgetId, remoteViews);
break ;
default :
break ;
}
}
};
handler.post( new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what = 0 ;
message.obj = new SimpleDateFormat( " yyyy年MM月dd日 HH:mm:ss " ).format( new Date());
handler.sendMessage(message);
handler.postDelayed( this , 1000 );
}
});
Log.d(TAG, " ---------onUpdate---------- " );
}
}
<?
xml version="1.0" encoding="utf-8"
?>
< RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:padding ="30dip"
android:layout_width ="match_parent"
android:layout_height ="wrap_content" >
< ImageView
android:id ="@+id/widget_img"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:src ="@drawable/ic_dialog_time" />
< TextView
android:textSize ="16dip"
android:textColor ="@color/green"
android:singleLine ="true"
android:ellipsize ="none"
android:gravity ="center"
android:paddingLeft ="5dip"
android:layout_toRightOf ="@id/widget_img"
android:layout_alignTop ="@id/widget_img"
android:layout_alignBottom ="@id/widget_img"
android:id ="@+id/widget_time"
android:layout_width ="match_parent"
android:layout_height ="wrap_content"
android:layout_weight ="1" />
</ RelativeLayout >
appwidget-provider描述文件
< RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:padding ="30dip"
android:layout_width ="match_parent"
android:layout_height ="wrap_content" >
< ImageView
android:id ="@+id/widget_img"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:src ="@drawable/ic_dialog_time" />
< TextView
android:textSize ="16dip"
android:textColor ="@color/green"
android:singleLine ="true"
android:ellipsize ="none"
android:gravity ="center"
android:paddingLeft ="5dip"
android:layout_toRightOf ="@id/widget_img"
android:layout_alignTop ="@id/widget_img"
android:layout_alignBottom ="@id/widget_img"
android:id ="@+id/widget_time"
android:layout_width ="match_parent"
android:layout_height ="wrap_content"
android:layout_weight ="1" />
</ RelativeLayout >
<?
xml version="1.0" encoding="utf-8"
?>
< appwidget-provider xmlns:android ="http://schemas.android.com/apk/res/android"
android:minWidth ="300dip"
android:minHeight ="20dip"
android:updatePeriodMillis ="1000"
android:initialLayout ="@layout/widgetlayout"
>
</ appwidget-provider >
AndroidManifest.xml中的配置
< appwidget-provider xmlns:android ="http://schemas.android.com/apk/res/android"
android:minWidth ="300dip"
android:minHeight ="20dip"
android:updatePeriodMillis ="1000"
android:initialLayout ="@layout/widgetlayout"
>
</ appwidget-provider >
<
receiver
android:name =".ShowTimeNowAppWidget"
>
< intent-filter >
< action android:name ="android.appwidget.action.APPWIDGET_UPDATE" />
< category android:name ="android.intent.category.DEFAULT" />
</ intent-filter >
< meta-data android:name ="android.appwidget.provider"
android:resource ="@xml/widget" />
</ receiver >
运行效果
android:name =".ShowTimeNowAppWidget"
>
< intent-filter >
< action android:name ="android.appwidget.action.APPWIDGET_UPDATE" />
< category android:name ="android.intent.category.DEFAULT" />
</ intent-filter >
< meta-data android:name ="android.appwidget.provider"
android:resource ="@xml/widget" />
</ receiver >