`
whao189
  • 浏览: 124215 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

建立appwidget

 
阅读更多
做过了appwidget但是貌似心里还是不是很清楚整过过程,话说当初觉得android 很简单,现在看来太高估自己了。android 里面的东西还是又很多要学习的!

好了就说说我们这里的widget吧,我将详细的介绍建立widget 的每一个步骤可能我的话我会自己写一个demo上传(当然得时间允许)
-------------------------------------------------------------------------------------


第一步:建立 AppWidgetProviderInfo这个xml文件

建立目的:这里我们要定义wideget的大小更新时间等等

google的原文如下:
AppWidgetProviderInfo object
Describes the metadata for an App Widget, such as the App Widget's layout, update frequency, and the AppWidgetProvider class. This should be defined in XML.

AppWidgetProviderInfo  对象

为这个widget提供元数据,例如 widget 的布局,更新频率,和 AppWidgetProvider 类,这些事必须定义在xml中的 我们在res下建立 xml文件夹 然后建立 your_name_provider.xml(名字自己定义吧)
google-android code
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure" 
    android:resizeMode="horizontal|vertical">
</appwidget-provider>

android:minWidth="294dp" android:minHeight="72dp"  定义宽和高
android:updatePeriodMillis="86400000"              定义更新频率
android:previewImage="@drawable/preview"           定义预览图片
android:initialLayout="@layout/example_appwidget"  定义初始化布局
android:configure="com.example.android.ExampleAppWidgetConfigure" 这是一个可选的参数 这里之所以这么定义是让我们自己选择是否在启动这个widget 之前先启动一个activity
android:resizeMode="horizontal|vertical"           定义在桌面可以上下 或者 左右调整大小

第二步:
上面第一步的工作就是为了第二步用,我们在定义AppWidgetProvider 了
在mainfest.xml 中 定义自己的 AppWidgetProvider
google----anroid code
<receiver android:name="ExampleAppWidgetProvider" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/example_appwidget_info" />
</receiver>

<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />  定义了系统发出APPWIDGET_UPDATE 通知这个 receiver
meta-data               定义了元数据,通过resource 指定 AppWidgetProvider的相关属性(包括了大小 更新频率 等等)

这些设置好之后就是设置我们的layout 了因为现在widget虽然产生了 但是widget中的 view 我们还没有定义出来,接下来就是要定义我们的layout 了

但是请注意在定义view 的时候有些组件我们是不能使用的,因为widget不支持这些组件

google--android:

A RemoteViews object (and, consequently, an App Widget) can support the following layout classes:

FrameLayout
LinearLayout
RelativeLayout

And the following widget classes:

AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper

布局就支持以上三种,组件也就那么多!所以使用的时候要注意


完成AppWidgetProvider  的工作之后我们的widget就算是完成了80%了,剩下的事情就是怎么让你定义好的layout显示在屏幕上了,上面我们看到了 RemoteViews 就是它了,

我们剩下的显示的事情 可以放在service里面处理 利用remoteview 对象

RemoteViews views = new RemoteViews(getPackageName(),R.layout.yourlayoutname);


在remoteview上处理了之后我们要做的就是 更新widget(也就是通知AppWidgetProvider  刷新界面了) 这时我们使用
ComponentName widget = new ComponentName(Context, AppWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this); manager.updateAppWidget(widget, views);

这样的话我们就更新了界面(使用updateAppWidget(ComponentName provider, RemoteViews views) android 源码里这么写着注释
It is okay to call this method both inside an {@link #ACTION_APPWIDGET_UPDATE} broadcast, * and outside of the handler.我理解的意思就是 如果能成功调用这个 updateAppWidget方法 就是类似于系统发出了。。。android.appwidget.action.APPWIDGET_UPDATE 广播 mainfest.xml中已经定义了)

到这里为止我们的一个widget已经可以说完成了!
分享到:
评论

相关推荐

    android appwidget测试

    其中onDeleted()方法是当appwidget删除时被执行,onDisabled()是当最后一个appwidget被删除时执行,onEnabled()为当第一个appwidget被建立时执行,onReceive()为当接收到了相应的广播信息后被执行(在每次添加或者...

    android 桌面小窗口 widget demo

    &lt;action android:name="android.appwidget.action.APPWIDGET_UPDATE" /&gt; android:name="android.appwidget.provider" android:resource="@xml/app_widget_info" /&gt; ``` **步骤四:创建...

    Android高级技术11月考试试题及答案.docx

    以上是Android高级技术的一些关键知识点,涵盖了WebView的JavaScript交互、XML解析策略、权限管理、相机使用、定位服务、AppWidget开发、AsyncTask的使用、TabHost定制、网络连接超时设置以及AppWidget的布局和组件...

    项目经理Android笔记及试题

    以上内容涵盖了Android开发中的一些关键知识点,包括WebView的使用、XML解析方式、权限管理、Camera接口、LocationManager定位服务、AppWidget开发、AsyncTask的使用、Http连接的设置以及HttpClient的基本操作。...

    Android模拟测验库.docx编程资料

    例如,`AppWidgetReceiver`和`AppWidgetConfigure`不是用于开发AppWidget的标准类,而`AppWidgetManager`则是一个管理AppWidget的工具类。 ### AsyncTask的后台计算工作 - **知识点概述**:`AsyncTask`是一个用于...

    (完整版)Android手机天气预报项目报告.doc

    数据库设计选用SQLite,建立forecasts.db数据库,包括weather_widget和weather_forecast两张表,分别存储显示页面和详细页面的数据。例如,weather_forecast表用于存储未来天气情况,包括主键_id、组件ID(widgetId)...

    电信设备-安卓操作系统中微件界面的建立方法及移动终端.zip

    - 配置`appwidget_info.xml`:定义微件的大小、初始布局等信息。 - 更新微件:通过`AppWidgetProvider`的`onUpdate()`方法更新微件内容,例如定时或接收到特定事件时。 4. **移动终端上的微件实现** - 在移动...

    Android 4.X手机/平板电脑程序设计入门、应用到精通_源代

     4大类Android程序完全详解,包括Activity、Service.Content provider和Broadcast receiver,以及App Widget程序; 2D和3D绘图程序架构与案例,奠定开发游戏程序的基础; Google地图与自动定位程序,让您学会开发...

    Heimdal-iOS:iOS App,Today Widget和Apple Watch App,可通过Bluetooth LE打开Hipo的大门

    本文将深入探讨Heimdal-iOS项目,这是一个专为iOS设计的应用程序,结合了Today Widget和Apple Watch App的功能,通过Bluetooth Low Energy(蓝牙LE)技术,用户可以便捷地与名为Hipo的系统进行交互,实现物理空间的...

    Android考试题库.docx

    - **关键方法**:`onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)`,在这个方法中完成AppWidget的更新逻辑。 ### AsyncTask类 **知识点**:`AsyncTask`是一个轻量级的异步...

    基于flutter开发邻家小铺app.zip

    在“邻家小铺”App中,我们可以利用这些Widget构建出丰富的用户界面,如商品列表、购物车、用户评论等模块。 三、State管理和数据绑定 在Flutter中,Widget的状态由State对象管理。当State改变时,相应的Widget会...

    父子窗口部件的建立

    ### 知识点:父子窗口部件的建立 在Qt中,构建GUI应用程序时经常会涉及到不同窗口部件(Widget)之间的组织关系。其中一种重要的组织方式就是通过“父子”关系来关联不同的窗口部件。这种方式有助于实现更复杂的...

    Android基础知识详解

    Android的系统架构 6 一、应用程序 6 二、应用程序框架 6 三、Android Runtime 7 四、系统库 7 五、Linux 内核 8 Webkit浏览器引擎简介 9 Dalvik虚拟机简介 11 ...窗口小部件(App Widget) 124 NDK编程 125

    利用 Qt Creator 建立空白工程文件示例代码

    在本文中,我们将深入探讨如何使用Qt Creator建立一个空白的工程文件,并通过具体的示例代码进行解析。Qt Creator是一款强大的集成开发环境(IDE),专为使用Qt库进行跨平台应用程序开发而设计。它提供了直观的界面...

    多伦多大学三一学院的新生入学周App采用Flutter开发

    5. **新生入学周App功能**:这样的App可能包含多种功能,如日程安排、地图导航、新生指南、互动论坛、校园新闻、活动报名等,旨在帮助新生熟悉校园环境,了解学术要求,建立社交网络,并参与迎新活动。 6. **热重载...

    Android手机天气预报项目报告.doc

    该项目采用了客户端-服务器(C/S)架构,客户端是运行在 Android 设备上的 App Widget 应用,服务器端负责获取并处理网络上的天气预报信息。主要技术栈包括: - 网络通信:可能使用了 HTTP 或 HTTPS 协议与 Web ...

    rdio-today-widget:可与 Rdio Mac App 配合使用的 OS X Today 小部件

    它通过一个脚本桥与Rdio的Mac应用程序建立连接,使得用户无需打开Rdio应用本身,就能在Today视图中浏览音乐、播放歌曲,甚至控制播放进度,极大地提升了音乐体验的便捷性。 在开发过程中,开发者可能利用了Apple的...

    flexbe_app:FlexBE行为引擎的用户界面(编辑器+运行时控件)

    FlexBE应用 FlexBE行为引擎的用户界面(编辑器+运行时控件)。 安装 将以下存储库克隆到您的ROS工作空间中: ...git clone https://github.com/FlexBE/flexbe_app.git ... rosrun flexbe_widget create_r

Global site tag (gtag.js) - Google Analytics