当前位置: 移动技术网 > IT编程>移动开发>Android > 基于Android AppWidgetProvider的使用介绍

基于Android AppWidgetProvider的使用介绍

2019年07月24日  | 移动技术网IT编程  | 我要评论

西伯利亚雪橇犬,赛尔号加鲁德,2009金瓶梅

appwidgetprovider 用来在home页面显示插件

实现步骤:
1、为appwidget提供一个元布局文件appwigdetprovider_provider.xml,用来显示widget的界面。
2、创建一个类继承自appwidgetprovider,并覆写里面的相关的方法。
3、为widgetprovider创建一个引用的布局文件,或者直接用main.xml。
4、在程序中注册manifest.xml。

代码如下:

1、在res/xml/文件夹下创建appwigdetprovider_provider.xml文件

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
  android:initiallayout="@layout/main"  <!-- android:initiallayout 设置引用的布局文件 -->
  android:minheight="50dip"
  android:minwidth="50dip"
  android:updateperiodmillis="5000" > <!-- 设置更新时间,单位为毫秒 -->

</appwidget-provider>

2、修改mainactivity继承自appwidgetprovider并覆写里面的一些方法

复制代码 代码如下:

public class mainactivity extends appwidgetprovider {

 @override
 public void onupdate(context context, appwidgetmanager appwidgetmanager, int[] appwidgetids) {
  super.onupdate(context, appwidgetmanager, appwidgetids);
  timer timer = new timer();
  timer.scheduleatfixedrate(new lytimetask(context, appwidgetmanager), 1, 50000);
 }

 private class lytimetask extends timertask {
  remoteviews remoteviews;
  appwidgetmanager appwidgetmanager;
  componentname widget;

  @override
  public void run() {
   date date = new date();
   calendar calendar = new gregoriancalendar(2013, 07, 24);
   long days = (calendar.gettimeinmillis() - date.gettime()) / 1000 / 86400;
   remoteviews.settextviewtext(r.id.worldcup, "距离宝贝生日" + days + "天");
   appwidgetmanager.updateappwidget(widget, remoteviews);
  }

  public lytimetask(context context, appwidgetmanager appwidgetmanger) {
   super();
   this.appwidgetmanager = appwidgetmanger;
   remoteviews = new remoteviews(context.getpackagename(), r.layout.activity_main);
   widget = new componentname(context, mainactivity.class);
  }
 };
}



3、为widget创建一个显示用的布局文件:main.xml

复制代码 代码如下:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@drawable/worldcup"
  android:orientation="vertical" >
  <textview
    android:id="@+id/babybirthday"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/message"
    android:textsize="12px"
    android:textcolor="#ff0000" />
</linearlayout>


4、修改程序自动生成的清单文件。在androidmanifest.xml中,声明上述的appwidgetprovider的子类是一个receiver,并且:

(1)、该receiver的intent-filter的action必须包含“android.appwidget.action.appwidget_update”;

(2)、该receiver的meta-data为“android.appwidget.provider”,并用一个xml文件来描述布局属性。

复制代码 代码如下:

 <application
  android:allowbackup="true"
  android:icon="@drawable/ic_launcher"
  android:label="@string/app_name"
  android:theme="@style/apptheme" >
  <receiver
    android:name=".mainactivity"
    android:label="@string/app_name" >
    <intent-filter>
      <action android:name="android.appwidget.action.appwidget_update" /><!--广播接收过滤器-->
    </intent-filter>

    <meta-data
      android:name="android.appwidget.provider"
      android:resource="@xml/appwigdetprovider_provider" /><!--appwidgetprovider引用的provider文件-->
  </receiver>
</application>

运行程序:进入widgets页面,可将widget添加到home页

在appwidgetprovider类中,还有其它相关的方法

复制代码 代码如下:

public class widgetprovider extends appwidgetprovider {

    // 每接收一次广播消息就调用一次,使用频繁
    public void onreceive(context context, intent intent) {
        super.onreceive(context, intent);
    }

    // 每次更新都调用一次该方法,使用频繁
    public void onupdate(context context, appwidgetmanager appwidgetmanager, int[] appwidgetids) {
        super.onupdate(context, appwidgetmanager, appwidgetids);
    }

    // 每删除一个就调用一次
    public void ondeleted(context context, int[] appwidgetids) {
        super.ondeleted(context, appwidgetids);
    }

    // 当该widget第一次添加到桌面是调用该方法,可添加多次但只第一次调用
    public void onenabled(context context) {
        super.onenabled(context);
    }

    // 当最后一个该widget删除是调用该方法,注意是最后一个
    public void ondisabled(context context) {
        super.ondisabled(context);
    }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网