其实创建一个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;@Overridepublic 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();}@Overridepublic 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(){}@Overridepublic 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>

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. android 开发edittext获取焦点时hint消失
  3. Android设备不root,从App目录下拷贝文件
  4. [工作积累] android 中添加libssl和libcurl
  5. Android(安卓)动画实现弹幕效果
  6. Android(安卓)ListView分组布局改进
  7. Android(安卓)自定义loading
  8. Android中GridView的每行自动适应Adapter的个数
  9. Android(安卓)配置 OpenCV2.3.1

随机推荐

  1. 系统默认语言与系统支持的语言列表
  2. 坚果云企业网盘安全性怎么样?
  3. 使用 IXMLHTTPRequest 简单获取网页源代
  4. 语法基础: 使用不同的数据类型标记数组
  5. 使用WCF实现SOA面向服务编程—— 架构设
  6. {$POINTERMATH ON} 方便指针操作的编译指
  7. 将字符串转换成 UTF8 编码的函数
  8. 如何用 GDI 绘制阴影文字 - 回复
  9. SOA面向服务架构——SOA的概念
  10. 几个和当前路径相关的新函数