当前位置: 首页 > news >正文

Windows Mobile 6.5 Widgets开发初体验

作者:马宁

Windows Mobile 6.5的DTK终于发布了,其中最吸引人的是两个功能:Widgets和Gesture API。Widgets是近来非常流行的一项技术,用于显示一些常用信息,比如天气、股票、新闻和体育等。Google Android和Symbian上已经有了类似的技术,可以说,Widgets是很好地结合了移动设备与互联网的技术。虽然Widgets开发简单,但很有可能改变移动互联网的未来格局。目前Windows Mobile 6.5的Widgets是基于W3C的Widgets草案,支持2008年12月22日草案,链接在http://www.w3.org/TR/2008/WD-widgets-20081222/。

开发环境

好了,接下来,我们就要看一下,如何为Windows Mobile 6.5开发一个Widgets控件。首先,我们需要下载Windows Mobile 6.5的DTK,下载链接为:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e

Windows Mobile 6.5的DTK需要与Windows Mobile 6 SDK配合使用,Windows Mobile 6 SDK的下载地址:

http://www.microsoft.com/downloads/details.aspx?familyid=06111a3a-a651-4745-88ef-3d48091a390b&displaylang=en

由于很多Widgets都需要联网,所以测试环境也需要ActiveSync的支持。Vista应该使用Windows Mobile Device Center 6.1,下载地址:

http://www.microsoft.com/windowsmobile/en-us/help/synchronize/device-center-download.mspx

编写Widgets

接下来,我们就可以来开发一个Widgets了。首先创建一个WidgetDemo的文件夹,创建一个叫做widget.htm的文件,将下面的HTML代码拷贝到文件中:

html>

head> 

title>Cool Widget!title> 

head> 

body> 

I'm a cool windows mobile 6.5 widget 

<!-- Search Google -->

form method="get" action="http://www.google.cn/custom" target="google_window"> table bgcolor="#ffffff"> tr>td nowrap="nowrap" valign="top" align="left" height="32"> a href="http://www.google.com/"> img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google" align="middle">img>a> label for="sbi" style="display: none">????????label>tr> tr> input type="text" name="q" size="31" maxlength="150" value="" id="sbi">input> label for="sbb" style="display: none">??????label> input type="submit" name="sa" value="??" id="sbb">input> input type="hidden" name="client" value="pub-9289651901062754">input> input type="hidden" name="forid" value="1">input> input type="hidden" name="ie" value="UTF-8">input> input type="hidden" name="oe" value="UTF-8">input> input type="hidden" name="cof" value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1">input> input type="hidden" name="hl" value="zh_CN">input> td>tr>table> form> <!-- Search Google --> body> html>
<style type="text/css"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }</style>

这个Widget就是调用Google的搜索页面。原来的Widget Demo没有Google搜索的代码,我从网上找了一个示例加了进去。接下来,创建一个叫做config.xml的文件,将下列代码拷贝到文件中:

xml version="1.0" encoding="utf-8" ?> 

widget version="1.0" 

xmlns="http://www.w3.org/ns/widgets" 

id=""> 

name>My first widgetname> 

content src="widget.htm" type="text/html" /> 

access network="true" /> 

icon src="icon.png"/> description>This is my first widget, it won't make a lot of money on the marketplace but at least is cute!description> widget>
<style type="text/css"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }</style>

这是一个描述性的XML文件,结构非常清晰,不需要多做解释了。注意content,icon和access network三个节点。Content的src就是我们刚编写的widget.htm, 允许Widget访问网络,icon则是显示在Windows Mobile开始菜单里的图标。

zip

现在有了三个文件,我们使用WinZip将其压缩成一个ZIP文件。特别需要指出的是,我们不能压缩这三个文件所在的文件夹,必须选中所有文件之后进行压缩。然后我们将WidgetDemo.zip的扩展名改为WidgetDemo.wgt。

部署Widget

到这里,Widget开发就完成了。通过ActiveSync或者共享目录,将Widget拷贝到Windows Mobile 6.5的模拟器中。

Widgets1 Widgets2

我们使用File Explorer来找到这个Widget文件,点击之后,会提示是否安装并运行这个Widget。

安装Widget之后,会自动运行,Google的图标来源于网络,所以可能会显示慢一些。如果Google图标没有显示出来,则说明网络连接不通:

Widgets7 Widgets5

输入关键字,点击button,Widget会自动启动IE Mobile,显示搜索结果。

在使用时,我们可以在开始菜单里找到相应的图标,可以打开Widget。还需要说明的是,如何卸载这个Widget。

在开始菜单 - Setting – System - Remove Programs里,可以看到我们的Widget,与卸载普通的应用程序没有区别。

Widgets6

我们的Widget被安装在\Program Files\Widgets\User\7的目录里,目录的序号与安装顺序有关,比如1里就是内置的Live Search。

写在最后

写到这里,Widget的开发就完成了,怎么样?简单吧。Widget开发的简单性,正是它未来可能缔造辉煌的主要优势。任何熟悉HTML和JavaScript的人都可以开发出功能丰富的Widget,而Widget又可以像普通应用程序一样使用。

虽然不像Palm的WebOS那样具有颠覆性,但是依托于目前的技术,才能获得大多数开发者的支持。现在只有Windows Mobile 6.5支持Widget,但其他移动设备是否有可能支持Widget呢?一切皆有可能。

总之,一句话,大有可为!

其实HTML和JavaScript并不是我的强项,下周还是给大家说说Gesture API吧 J

参考资料

Getting started with widgets on Windows Mobile 6.5

http://blogs.msdn.com/windowsmobile/archive/2009/06/04/getting-started-with-widgets-on-windows-mobile-6-5.aspx

Developing Widgets for Windows Mobile 6.5

http://msdn.microsoft.com/en-us/library/dd721906.aspx

Windows Mobile 6.5 Widget系列文章

http://www.shangducms.com/post/Windows-Mobile-Widget.aspx

相关文章:

  • 重温TCP-IP学习笔记 3/3
  • android webview 跳过免费ssl证书验证
  • android webview file标签点击弹出选择文件或拍照菜单
  • AzureAD 错误信息Access token validation failure
  • android webview实现拍照
  • lens flare:镜头光晕
  • SQL批处理 导入excel数据到表
  • opengl粒子系统的渲染方式
  • html5 canvas上传图片后预览
  • ZBuffer裁剪planar shadow
  • 3D几何流水线之模型变换
  • html5 canvas 加载图片错误 SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement'
  • RGBA模式人物换色的实现
  • javascript实现QR code扫描
  • android webview旋转屏幕导致页面重新加载问题
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 230. Kth Smallest Element in a BST
  • CSS居中完全指南——构建CSS居中决策树
  • exports和module.exports
  • laravel with 查询列表限制条数
  • MySQL主从复制读写分离及奇怪的问题
  • PHP的Ev教程三(Periodic watcher)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 包装类对象
  • 精彩代码 vue.js
  • 手机端车牌号码键盘的vue组件
  • 我这样减少了26.5M Java内存!
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #1015 : KMP算法
  • #pragma once与条件编译
  • (9)目标检测_SSD的原理
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (四) 虚拟摄像头vivi体验
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)基于IDEA的JAVA基础12
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .a文件和.so文件
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net core 6.0 升8.0
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .Net 高效开发之不可错过的实用工具
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /etc/fstab和/etc/mtab的区别
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [c++] C++多态(虚函数和虚继承)
  • [C++] 统计程序耗时
  • [C++][基础]1_变量、常量和基本类型
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [HDU5685]Problem A