Android中桌面小部件AppWidget的使用

Android中桌面小部件AppWidget的使用,第1张

概述桌面部件一般用于图库、音乐播放器、天气预报、日历、时钟等。尤其系统应用,其实可以长按手机桌面,底部会出现“桌面小工具”的图标,点击即可查看当前设备上的所有桌面小部件。那如何在自己的应用上实现小部件的功能呢?以下就从一个简单的demo介绍: 一、AppWidgetProvider的

    桌面小部件一般用于图库、音乐播放器、天气预报、日历、时钟等。尤其系统应用,其实可以长按手机桌面,底部会出现“桌面小工具”的图标,点击即可查看当前设备上的所有桌面小部件。那如何在自己的应用上实现小部件的功能呢?以下就从一个简单的demo介绍:

 一、appwidgetprovider的使用:

public class appwidgetprovider extends broadcastReceiver {......}

查看源码可知,appwidgetprovider本身是一个广播接收者。

实现步骤:一些注意事项在代码中都有注释。

1、自定义一个Taskappwidgetprovider,继承自appwidgetprovider ;
 1 public class Taskappwidgetprovider extends appwidgetprovider { 2  3     //    appwidgetprovider:继承了broadcastReceiver 4  5     private final String TAG="Taskappwidgetprovider"; 6     private final String UPDATE_Widget_ACTION = "androID.appWidget.action.APPWidget_UPDATE"; 7  8     @OverrIDe 9     public voID onReceive(Context context, Intent intent) {10         // Todo auto-generated method stub11         super.onReceive(context, intent);12         Log.i(TAG, "onReceive() " + intent.getAction());13     }14 15 16     @OverrIDe17     public voID onUpdate(Context context, AppWidgetManager appWidgetManager,18             int[] appWidgetIDs) {19         // Todo auto-generated method stub20         super.onUpdate(context, appWidgetManager, appWidgetIDs);21         Log.i(TAG, "onUpdate()   appWidgetIDs.length: " + (appWidgetIDs!=null?appWidgetIDs.length:0));22         23         initWidget(context, appWidgetIDs);24         25     }26     27     //初始化界面28     private voID initWidget(Context context, int[] appWidgetIDs){29         RemoteVIEws vIEws = new RemoteVIEws(context.getPackagename(), R.layout.task_appWidget);30         vIEws.setTextVIEwText(R.ID.change_text, "onUpdate中修改文本-");31         initListener(context, vIEws);32         33         update(context, appWidgetIDs, vIEws);        //通知系统更新Widget---否则,对界面的修改及设置的监听事件等均无效34     }35     //设置控件的点击事件36     private voID initListener(Context context,RemoteVIEws vIEws){37         Intent intent;38         PendingIntent pendingIntent;39         40         intent = new Intent(context, MainActivity.class);41         pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);42         vIEws.setonClickPendingIntent(R.ID.main_btn, pendingIntent);43         44         intent = new Intent(context, SearchActivity.class);45         pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);46         vIEws.setonClickPendingIntent(R.ID.search_btn, pendingIntent);47     }48     49     /**50      * 更新Widget51      * @param context52      * @param appWidgetIDs  当前桌面该应用部件的实例个数,简单理解:即在桌面添加了几个该部件53      * @param vIEws54      */55     private voID update(Context context,int[] appWidgetIDs, RemoteVIEws vIEws){56         AppWidgetManager WidgetMng = AppWidgetManager.getInstance(context);57         if(appWidgetIDs != null){58             WidgetMng.updateAppWidget(appWidgetIDs, vIEws);59         }else{60             WidgetMng.updateAppWidget(new Componentname(context, getClass()), vIEws);61         }62     }63     64 }
 2、在AndroIDManifest.xml中注册,不同的是,此处要指定在桌面小部件列表中显示的布局;
 <receiver            androID:name="com.test.appWidget.Taskappwidgetprovider"            androID:label="@string/Widget_Title" >            <intent-filter>                <action androID:name="androID.appWidget.action.APPWidget_UPDATE" />    <!-- 在添加小部件时,androID系统发出的广播      与下面的Meta-data都是必须的,否则在小部件列表中不会显示 -->            </intent-filter>            <Meta-data                androID:name="androID.appWidget.provIDer"                        androID:resource="@xml/task_Widget_info" />        <!-- name:必需是此名称     resource:在窗口小部件列表中显示的布局  -->        </receiver>
3、定义xml文件<appWidget-provIDer/>,里面是关于小部件的配置信息及具体显示布局;
//task_Widget_info.xml<?xml version="1.0" enCoding="UTF-8"?><appWidget-provIDer    xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:initialLayout="@layout/task_appWidget"    androID:minHeight="150dip"    androID:minWIDth="200dip"    androID:prevIEwImage="@drawable/local_search"    androID:updatePeriodMillis="86400" ></appWidget-provIDer>
androID:initialLayout是具体显示布局:task_appWidget.xml

<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:tools="http://schemas.androID.com/tools"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:layout_gravity="center_horizontal"    androID:background="#afffffff"    androID:padding="10dp" >    <linearLayout        androID:ID="@+ID/linear_layout"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:orIEntation="vertical" >        <TextVIEw            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="测试窗口小部件"            androID:textcolor="#000"            androID:textSize="20sp" />        <TextVIEw            androID:ID="@+ID/change_text"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="change-text"            androID:textcolor="#000"            androID:textSize="18sp" />    </linearLayout>    <button        androID:layout_below="@ID/linear_layout"        androID:ID="@+ID/main_btn"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:layout_margintop="10dp"        androID:text="click-main" />        <button        androID:ID="@+ID/search_btn"        androID:layout_toRightOf="@ID/main_btn"        androID:layout_marginleft="10dp"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:layout_alignBottom="@ID/main_btn"        androID:text="click-search" /></relativeLayout>
VIEw Code

 

上述完成后,运行程序;在手机桌面长按,观察在桌面小工具中是否存在,若存在则说明成功!

二、参考:

原文参考:http://www.cnblogs.com/TerryBlog/archive/2010/07/29/1788319.html    

 

总结

以上是内存溢出为你收集整理的Android中桌面小部件AppWidget的使用全部内容,希望文章能够帮你解决Android中桌面小部件AppWidget的使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存