App Widget(Application Widget)第一讲(Android学习随笔十)

App WidgetApplication Widget)的实现步骤:

a、创建AppWidgetProvider对象,通过使用XML(appwidgetinfo.xml)来定义:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:minWidth="294dp"
  android:minHeight="72dp"
  android:updatePeriodMillis="86400000"
  android:initialLayout="@layout/awl"
  >
  
</appwidget-provider>

定义了AppWidget的最小宽度、最小高度、更新周期和AppWidget的初始布局。

其中AppWidget的初始布局文件(awl.xml)为如下:

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

b、实现AppWidgetProvider类(AWTProvider.java):

package yc.yc;

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 AWTProvider extends AppWidgetProvider {

	//每当一个AppWidget被删除,就会调用onDeleted方法。
	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		System.out.println("delete");
		super.onDeleted(context, appWidgetIds);
	}

	//当最后一个AppWidget被删除,就会调用onDisabled方法。
	//在此方法中一般情况下执行一些AppWidget的结束性操作,如删除一个临时数据库等操作。
	@Override
	public void onDisabled(Context context) {
		System.out.println("disable");
		super.onDisabled(context);
	}
	//当第一个AppWidget实例被创建是,就会调用onEnabled方法。
	//在此方法中一般情况下执行一些AppWidget的初始化的工作,如新建一个数据库或者一些操作等。
	@Override
	public void onEnabled(Context context) {
		System.out.println("enable");
		super.onEnabled(context);
	}
	//onReceive相当一个经理,当外界来任务了,将任务分发给其下的员工(onEnable,onDeleted,onDisabled,onUpdate)处理
	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("receive");
		super.onReceive(context, intent);
	}

	//在这里onUpdate执行的条件有两个:1、到了我们所设定的更新周期了;2、添加一个新的AppWidget。
	//在onUpdate中一般为控件定义事件处理或者开启一个临时的Service。
	//这里是为我们的button控件添加点击事件处理
	//context表示这个接收器正在运行的环境
	//appWManager表示AppWidget的管理器可通过调用 updateAppWidget(ComponentName, RemoteViews)更改指定AppWidget的控件属性
	//appWidgetIds表示Appwidget的编号,系统自动生成
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		System.out.println("update");
		final int N = appWidgetIds.length;              
		for (int i=0; i<N; i++) {            
			int appWidgetId = appWidgetIds[i];  
			System.out.println("appWidgetId="+appWidgetId);           
			Intent intent = new Intent(context, AWTActivity.class);            
			PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);              
			RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.awl);            
			views.setOnClickPendingIntent(R.id.btn, pendingIntent);                      
			appWidgetManager.updateAppWidget(appWidgetId, views);        
		}
		
	}

}

C、在AndroidManifest.xml中注册实现类,并且定义元数据:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="yc.yc"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".AWTActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 注册实现类 -->
	<receiver android:name=".AWTProvider">
		<intent-filter>
			<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
		</intent-filter>
		<!-- 定义元数据 -->
		<meta-data android:name="android.appwidget.provider"
			android:resource="@xml/appwidgetinfo"/>
	</receiver>
    </application>
</manifest>


 注意:这只是AppWidget的第一讲,还有后续的课程。

 

 

你可能感兴趣的:(android,数据库,layout,application,button,encoding)