`
whao189
  • 浏览: 123204 次
  • 性别: 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手机天气预报项目报告.doc

    第2章 项目设计 2.1 项目总体设计 本软件是一个App Widget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显 示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等.这些天气数据是...

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

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

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

    第2章 项目设计 2.1 项目总体设计 本软件是一个App Widget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是...

    Android手机天气预报项目报告(2).docx

    第2章 项目设计 2.1 项目总体设计 本软件是一个App Widget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是通过...

    Android手机天气预报项目报告(1).docx

    第2章 项目设计 2.1 项目总体设计 本软件是一个App Widget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是...

    Android基础知识详解

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

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

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

    2010年谢彦的android笔记

    3.2.5 开发桌面小程序AppWidget 58 3.2.6 代码中运行二进制程序或脚本 60 3.2.7 Android自带的md5校验 61 3.2.8 将数据打进apk包 63 3.2.9 如何改变窗口的标题栏的布局 66 3.2.10 动态改变控件大小 67 3.2.11 缩放...

    Django-CRUD-Web-App:Django CRUD Web应用程序

    Django CRUD Web应用程序 配套 django =“ *” django-widget-tweaks =“ *” 枕头=“ *” 教程参考 建立一个Django的CRUD Web应用程序(一) - 建立一个Django的CRUD Web应用程序(第二部分) -

    Android实验报告—网络通信.doc

    import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget...

    android笔记.rar

    3.2.5 开发桌面小程序AppWidget ... ...58 3.2.6 代码中运行二进制程序或脚本 ... .60 3.2.7 Android自带的md5 校验 ... ..61 3.2.8 将数据打进apk包 ... ..63 3.2.9 如何改变窗口的标题栏的布局 ... .66 3.2.10 ...

    structured-cli:通过嵌套命令和类别轻松组成CLI应用程序

    建立在经过验证的命令行参数解析器。 使您可以将CLI工具构造为一组任意嵌套的和。 使您可以轻松地在不同命令之间重用逻辑。 使将一个命令别名为另一个命令变得容易。 将提供直观的帮助,而无需进行设置。 安装它...

    google android sdk开发范例大全 第二版 PDF 光盘代码

     4.30 实时配置桌面上的AppWidget UI Layout  第5章 交互式通信服务与手机控制   5.1 具有正则表达式的TextView   5.2 ACTION!CALL!拨打电话   5.3 自制发送短信程序   5.4 自制发送E-mail...

    Android Thread 介绍与实例

    我们采用最简单的方法来建立一个android的线程+消息的例子 1.Thread + Handler [java] 代码如下:package com.example.test_thread; import android.app.Activity; import android.os.Bundle; import android.os....

    flutter_responsive_table

    响应表响应数据表是一种高度灵活的工具,建立在逐步增强的基础上,可将所有这些高级功能添加到任何颤振表中。例子 import 'dart:math';import 'package:flutter/material.dart';void main() { runApp(MyApp());}...

    Google Android SDK开发范例大全(第3版) 1/5

    4.30 实时配置桌面上的AppWidget UI Layout 4.31 识别输入装置ID与InputDevice装置 4.32 选取文字的聪明文字联想 4.33 设计与Launcher相同的三页滑动Layout 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的...

    Google Android SDK开发范例大全(第3版) 4/5

    4.30 实时配置桌面上的AppWidget UI Layout 4.31 识别输入装置ID与InputDevice装置 4.32 选取文字的聪明文字联想 4.33 设计与Launcher相同的三页滑动Layout 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的...

    Google Android SDK开发范例大全(第3版) 3/5

    4.30 实时配置桌面上的AppWidget UI Layout 4.31 识别输入装置ID与InputDevice装置 4.32 选取文字的聪明文字联想 4.33 设计与Launcher相同的三页滑动Layout 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的...

Global site tag (gtag.js) - Google Analytics