本次创建一个简单的appwidget。
相关概念:
1、AppWidgetProviderInfo对象:它是一个xml文件,为appWidget提供元数据,包括布局,更新频率等数据。这个对象定义在xml中。
2、AppWidgetProvider: 定义了appwidget的基本生命周期函数。
不多说,一切尽在代码:
1、在layout中新建一个appwidgetlayout.xml文件。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:id="@+id/textview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- </LinearLayout
没什么多说的,只是一个textview。这个是我们的应用程序在桌面的控件。
2、在res中新建一个xml包,在这个包中新建一个appwidget_info.xml文件。
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="294dp"
- android:minHeight="72dp"
- android:updatePeriodMillis="86400000"
- android:initialLayout="@layout/appwidgetlayout"
- />
这个xml为appwidget提供元数据,这个是在桌面的布局,而这个layout(appwidgetlayout)为在appwidget中控件的布局。
3、在包下新建我们的provider,他继承了AppWidgetProvider,我们只需要对它的生命周期进行处理就行了。
- public class AppWidgetprovider extends AppWidgetProvider {
- @Override
- public void onDeleted(Context context, int[] appWidgetIds) {
- // TODO Auto-generated method stub
- System.out.println("onDeleted");
- super.onDeleted(context, appWidgetIds);
- }
- @Override
- public void onDisabled(Context context) {
- // TODO Auto-generated method stub
- System.out.println("onDisable");
- super.onDisabled(context);
- }
- @Override
- public void onEnabled(Context context) {
- // TODO Auto-generated method stub
- System.out.println("onEnable");
- super.onEnabled(context);
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- System.out.println("onreceive");
- super.onReceive(context, intent);
- }
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager,
- int[] appWidgetIds) {
- // TODO Auto-generated method stub
- System.out.println("onUpdate");
- super.onUpdate(context, appWidgetManager, appWidgetIds);
- }
- }
public class AppWidgetprovider extends AppWidgetProvider { @Override public void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stub System.out.println("onDeleted"); super.onDeleted(context, appWidgetIds); } @Override public void onDisabled(Context context) { // TODO Auto-generated method stub System.out.println("onDisable"); super.onDisabled(context); } @Override public void onEnabled(Context context) { // TODO Auto-generated method stub System.out.println("onEnable"); super.onEnabled(context); } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("onreceive"); super.onReceive(context, intent); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub System.out.println("onUpdate"); super.onUpdate(context, appWidgetManager, appWidgetIds); } }
4、在AndroidManifest.xml中进行配置,由于这个appwidget使用的是广播机制,我们需要在AndroidManifest.xml中进行如下配置:
- <receiver android:name="AppWidgetprovider">
- <intent-filter >
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
- </intent-filter>
- <meta-data android:name="android.appwidget.provider"
- android:resource="@xml/appwidget_info"
- />
- </receiver>
通过过滤器我们截取APPWIDGET_UPDATE这个action,然后对provider进行资源配置,对应的刚刚那个xml中的文件。