Widget详解

程序运行截图:

Widget详解_第1张图片

一、Widget的创建步骤

widget:桌面小控件
1 写一个类extends AppWidgetProvider 
2 在清单文件件中注册:
<receiver android:name=".ExampleAppWidgetProvider" >
   <intent-filter>
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
   <meta-data android:name="android.appwidget.provider"
              android:resource="@xml/example_appwidget_info" />
</receiver>
3 在res/xml创建example_appwidget_info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:initialLayout="@layout/example_appwidget"
    >
</appwidget-provider>
4 指定布局  example_appwidget.xml


以上所涉及到的内容都可以在android的官网中找到,其实这里我只是作揖了以下简单翻译而已............


二、生命周期

生命周期:
1 添加到桌面:
  onEnabled() --> onUpdate() 
2 删除
  onDeleted()----> onDisabled()


如果桌面已经有一个了widget的实例存在,再次添加onUpdate()
删除之后,如果桌面上还有widget的实例存在,只会调用onDeleted().


三、以更新时间为例,讲解widget的使用

按照一中所说的方法创建好一个widget

然后

1)ExampleAppWidgetProvider

package com.njupt.widget3;

import java.text.SimpleDateFormat;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

public class ExampleAppWidgetProvider extends AppWidgetProvider {

	@Override
	public void onEnabled(Context context) {
		super.onEnabled(context);
	   
		Intent intent = new Intent(context,MyService.class);
		context.startService(intent);
	}
	
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		super.onUpdate(context, appWidgetManager, appWidgetIds);
		
		RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
		long date = System.currentTimeMillis();
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		String text = format.format(date);
		views.setTextViewText(R.id.tv_time,text);
		
		Intent intent =  new Intent(context,MainActivity.class);
		PendingIntent pendingIntent =  PendingIntent.getActivity(context, 100, intent, 0);
		views.setOnClickPendingIntent(R.id.tv_time, pendingIntent);
		
		appWidgetManager.updateAppWidget(appWidgetIds, views);
	}
	
	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		// TODO Auto-generated method stub
		super.onDeleted(context, appWidgetIds);
	}
	
	@Override
	public void onDisabled(Context context) {
		super.onDisabled(context);
		
		Intent intent = new Intent(context,MyService.class);
		context.stopService(intent);
	}
}


2)MyService

package com.njupt.widget3;

import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;

import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.widget.RemoteViews;

public class MyService extends Service {

	private Timer timer;
	private TimerTask task = new TimerTask() {
		
		@Override
		public void run() {
			AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
			
			
			RemoteViews views = new RemoteViews(getPackageName(), R.layout.example_appwidget);
			long date = System.currentTimeMillis();
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			String text = format.format(date);
			views.setTextViewText(R.id.tv_time,text);
			
			Intent intent =  new Intent(getApplicationContext(),MainActivity.class);
			PendingIntent pendingIntent =  PendingIntent.getActivity(getApplicationContext(), 100, intent, 0);
			views.setOnClickPendingIntent(R.id.tv_time, pendingIntent);
			
			ComponentName provider = new ComponentName(getApplicationContext(), ExampleAppWidgetProvider.class);
			appWidgetManager.updateAppWidget(provider, views);
		}
	};
	
	public void onCreate() {
		timer = new Timer();
		timer.schedule(task, 1000,1000);
	};
	
	@Override
	public void onDestroy() {
		super.onDestroy();
	    
		timer.cancel();
		task = null;
	}
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

}

3)最后不要忘了去AndroidManifest.xml中把service给注册上。。。


你可能感兴趣的:(Widget详解)