widget开发范例代码

widget开发实例代码

其实创建一个widget很简单。这里就做了一个简单的demo,作为学习记录。

 

首先在AndroidManifest.xml中添加如下部分

一个widget其实就是一个receiver

 

<receiver android:name="WidgetProvider">
        	<intent-filter>
				<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <intent-filter>
            	<action android:name="org.yangzc.widget.fresh"></action>
            </intent-filter>
        	<meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider"></meta-data>
        </receiver>

 

 

WidgetProvider.java部分代码如下:

 

provider需要继承自AppWidgetProvider,这个例子是定时更新widget内容。

package org.yangzc.widget;

import java.util.Calendar;

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

public class WidgetProvider extends AppWidgetProvider {

	private String fresh = "org.yangzc.widget.fresh";
	private Context context;
	
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
		Log.d("d","onUpdate");
//		super.onUpdate(context, appWidgetManager, appWidgetIds);
		this.context = context;
		for(int i=0; i<appWidgetIds.length; i++){
			int appWidgetId = appWidgetIds[i];
			RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
			views.setTextViewText(R.id.thread, i+":Sdfsdfsdf");
			appWidgetManager.updateAppWidget(appWidgetId, views);
		}
		
		RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
		views.setTextViewText(R.id.thread, ":Sdfsdfsdf");
		appWidgetManager.updateAppWidget(appWidgetIds[0], views);
		new MyThread().start();
	}

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.d("d","onReceive");
		super.onReceive(context, intent);
		String action = intent.getAction();
		if(fresh.equals(action)){
			RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.main);
			Calendar   cal=Calendar.getInstance();    
			System.out.println(cal.getTime().toLocaleString());  
			views.setTextViewText(R.id.thread, cal.getTime().toLocaleString());
			ComponentName thisWidget = new ComponentName(context,WidgetProvider.class);
			AppWidgetManager.getInstance(context).updateAppWidget(thisWidget, views);
		}
	}

	class MyThread extends Thread{
		public MyThread(){
		}

		@Override
		public void run() {
			while(true){
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				Intent intent = new Intent(fresh);
				context.sendBroadcast(intent);
			}
		}
		
	}
}

 

 

main.xml

 

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="wrap_content"
	android:layout_height="wrap_content">
	<TextView android:id="@+id/thread" android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="@string/hello" />
</LinearLayout>

 

 

appwidget_provider.xml

 

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
	android:minHeight="72px"  android:minWidth="72px"
	android:updatePeriodMillis="3800000" android:initialLayout="@layout/main">
</appwidget-provider>