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>
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值