AppWidgetTest

 
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。
 */
 

 




 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值