appwidgetprovider 用来在home页面显示插件
上述就是android开发分享基于Android AppWidgetProvider的使用介绍的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
实现步骤:
1、为appwidget提供一个元布局文件appwigdetprovider_provider.xml,用来显示widget的界面。
2、创建一个类继承自appwidgetprovider,并覆写里面的相关的方法。
3、为widgetprovider创建一个引用的布局文件,或者直接用main.xml。
4、在程序中注册manifest.xml。
代码如下:
1、在res/xml/文件夹下创建appwigdetprovider_provider.xml文件
<appwidget-provider xmlns:android=”https://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并覆写里面的一些方法
@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
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文件来描述布局属性。
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);
}
}
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/addevelopment/938772.html