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>