package com.hyz;
import android.app.Activity;
import android.os.Bundle;
/**
* 主程序入口类
*
*
*/
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
appwidget_provider.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="200dp"
android:minHeight="30dp"
android:updatePeriodMillis="1000"
android:initialLayout="@layout/firstappwidget"/>
firstappwidget.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/tvMsg" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:textSize="20dp"
android:textColor="#F00" />
</LinearLayout>
package com.hyz;
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.text.format.DateFormat;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.TextView;
/*
04-03 03:23:37.292: INFO/hyz(4640): MyAppWidgetProvider-->onEnabled
04-03 03:23:37.292: INFO/hyz(4640): MyAppWidgetProvider-->onReceive
04-03 03:23:37.312: INFO/hyz(4640): MyAppWidgetProvider-->onUpdate
04-03 03:23:37.332: INFO/hyz(4640): MyAppWidgetProvider-->onReceive
点击
04-03 03:25:09.662: INFO/hyz(4640): MyAppWidgetProvider-->onUpdate
04-03 03:25:09.682: INFO/hyz(4640): MyAppWidgetProvider-->onReceive
*/
public class MyAppWidgetProvider extends AppWidgetProvider
{
private String sysTimeStr;
private static final int msgKey1 = 1;
private Context con;
private int id;
private AppWidgetManager aw;
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
{
Log.i("hyz", "MyAppWidgetProvider-->onUpdate");
con = context;
aw = appWidgetManager;
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++)
{
id = appWidgetIds[i];
new TimeThread().start();
}
}
/**
* 当App Widget从宿主中删除时被调用。
*/
@Override
public void onDeleted(Context context, int[] appWidgetIds)
{
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
Log.i("hyz", "MyAppWidgetProvider-->onDeleted");
}
/**
* 当你的App Widget的最后一个实例被从宿主中删除时被调用。你应该在onEnabled(Context)中做一些清理工作,比如删除一个临时的数据库
*/
@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
super.onDisabled(context);
Log.i("hyz", "MyAppWidgetProvider-->onDisabled");
}
/**
* 当一个App Widget实例第一次创建时被调用。
* 比如,如果用户添加两个App Widget实例,只在第一次被调用。
* 如果你需要打开一个新的数据库或者执行其他对于所有的App Widget实例只需要发生一次的设置,
* 那么这里是完成这个工作的好地方。
*/
@Override
public void onEnabled(Context context) {
// TODO Auto-generated method stub
super.onEnabled(context);
Log.i("hyz", "MyAppWidgetProvider-->onEnabled");
}
/**
* 接收到每个广播时都会被调用,而且在上面的回调函数之前。
* 你通常不需要实现这个方法,因为缺省的AppWidgetProvider实现过滤所有App Widget广播并恰当的调用上述方法。
* 注意: 在Android 1.5中,有一个已知问题,onDeleted()方法在调用时不被调用。
* 为了规避这个问题,你可以像Group post中描述的那样实现onReceive()来接收这个onDeleted()回调。
*/
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
Log.i("hyz", "MyAppWidgetProvider-->onReceive");
}
private Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
Log.i("hyz", "MyAppWidgetProvider-->handleMessage");
super.handleMessage(msg);
switch(msg.what)
{
case msgKey1:
long sysTime = System.currentTimeMillis();
sysTimeStr = (String)DateFormat.format("hh:mm:ss", sysTime);
RemoteViews views = new RemoteViews(con.getPackageName(),R.layout.firstappwidget);
views.setTextViewText(R.id.tvMsg, "当前时间:" + sysTimeStr);
aw.updateAppWidget(id, views);
break;
default:break;
}
}
};
class TimeThread extends Thread
{
@Override
public void run()
{
Log.i("hyz", "MyAppWidgetProvider-->run");
do
{
try
{
Thread.sleep(1000);
Message msg = new Message();
msg.what = msgKey1;
mHandler.sendMessage(msg);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
while(true);
}
}
}
/*
* 当创建每一个appwidget的实例时AppWidgetManager都会调用该appwidget的onUpdate方法。
* 要想使更新有效,必须调用updateAppWidget方法更新相应的appwidget中的view。
*/