当前位置:操作系统 > 安卓/Android >>

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

 

App Widget(Application Widget)的实现步骤:

 

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

 

view

<?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)为如下:

 

view

<?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):

 

view

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中注册实现类,并且定义元数据:

 

view

<?xml version="1.0" encoding="utf-8"?> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

      package="yc.yc" 

      android:versionCode="1" 

 

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,