欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

基于Android AppWidgetProvider的使用介绍

程序员文章站 2023-12-11 23:04:40
appwidgetprovider 用来在home页面显示插件 实现步骤:1、为appwidget提供一个元布局文件appwigdetprovider_provider....

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页

基于Android AppWidgetProvider的使用介绍

在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);
    }
}

上一篇:

下一篇: