CN101006425A - 数据访问架构 - Google Patents

数据访问架构 Download PDF

Info

Publication number
CN101006425A
CN101006425A CNA2005800117372A CN200580011737A CN101006425A CN 101006425 A CN101006425 A CN 101006425A CN A2005800117372 A CNA2005800117372 A CN A2005800117372A CN 200580011737 A CN200580011737 A CN 200580011737A CN 101006425 A CN101006425 A CN 101006425A
Authority
CN
China
Prior art keywords
data
component software
user
plug
wireless device
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2005800117372A
Other languages
English (en)
Inventor
詹姆斯·D·爱德华
蒂姆西·B·马赛
卡西迪·L·拉基
斯蒂芬·N·麦圭根
罗纳德·D·帕通
罗伯特·维斯特
本杰明·高特利博
塞缪尔·P·切普曼
阿龙·D·苏玛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Handmark Inc
Original Assignee
Handmark Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Handmark Inc filed Critical Handmark Inc
Publication of CN101006425A publication Critical patent/CN101006425A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/958Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

公开了通过无线设备远程访问数据的方法和装置。优选地,无线设备包括在运行于无线设备上的软件组件之间链接数据的能力。此外,无线设备优选地包括减少远程数据访问的能力,这是通过下列步骤实现的:识别软件组件所使用的第一数据类型和第二数据类型,从业务提供者检索对应于第一数据类型的数据,从便携式设备检索对应于第二数据类型的数据,以及在便携式设备上显示返回内容结果,包括第一数据类型和第二数据类型。

Description

数据访问架构
相关申请
[001]本申请要求美国临时专利申请No.60/551,636的利益及优先权,该美国临时专利申请No.60/551,636于2004年3月10日提交,标题为“Wireless Data Access Architecture”。No.60/551,636申请的全部内容被完全包括到本申请中以供参考。
技术领域
本发明一般涉及通过无线设备进行远程数据访问以及无线设备内数据区之间的交互。
背景技术
通过因特网访问数据的因特网浏览器是已知的。在用户每次访问网页的时候,现有的因特网浏览器下载所有的图标、格式信息、文本等,以用于显示因特网内容。这些数据可以以不同的数据格式从数据业务提供者传递给访问设备。然而,由于通常使用受限带宽无线设备来访问业务提供者,因而传送大的文件对无线设备来说是难处理的。而且,即使在宽带无线访问可供利用的情况下,仍然希望减少或排除大的文件传输,以加快无线设备从数据业务提供者访问信息的速度。
除了带宽约束之外,无线设备也经常具有其他限制。举例来说,与桌上型计算机和其他非无线设备相比,移动电话、个人数字助理(PDA)以及掌上计算机通常在它们的处理、呈现、存储能力以及/或者用户导航所提供数据的能力等方面都受到限制。这些无线设备也可能具有受限的智能,诸如利用无线设备上的可用信息来推导出有用信息的能力或者利用设备上的其他应用程序有目的地操纵数据的能力等。这不仅限制了无线设备的内在性能,也限制了用户使用、交互以及/或者对所呈现信息的反应等方面的能力。因此,需要用于无线设备的改进的远程数据访问架构以及/或者自身经过改进的无线设备。
[005]利用本发明的教导,现有技术的上面没有阐述的其他问题也可以被克服,在阅读公开内容之后,这对于本领域普通技术人员将是显而易见的。
附图说明
附图1(包括子图1A和1B)描述了根据本发明一个实施例的无线数据访问架构。
附图2包括根据本发明一个实施例的来自天气插件/频道的示例性屏幕快照。
附图3描述了根据本发明一个实施例的软件组件把数据表示在无线设备上的方法的流程图。
附图4(包括子图4A-4H)包括根据本发明一个实施例的来自地图绘制/行驶方向插件/频道的示例性屏幕快照。
[010]附图5描述了根据本发明一个实施例的在无线设备上的软件组件之间链接数据的方法的流程图。
附图6(包括子图6A-4G)包括根据本发明一个实施例的来自航班插件/频道的示例性屏幕快照。
附图7(包括子图7A-7G)包括根据本发明一个实施例的来自娱乐表演时间插件/频道的示例性屏幕快照。
附图8(包括子图8A-8D)包括根据本发明一个实施例的来自情节摘要/新闻插件/频道的示例性屏幕快照。
附图9(包括子图9A-9F)包括根据本发明一个实施例的来自电话号簿插件/频道的示例性屏幕快照。
[015]附图10显示了根据本发明一个实施例的411频道/插件和地图绘制/行驶方向频道/插件之间逐步完成数据交换的屏幕快照。
附录A包含根据本发明一个实施例的令牌分析(Token Parser)类的示例性代码。
附录B包含根据本发明一个实施例的缓存文件工具类概述(Cache File Tool Class Overview)类的示例性代码。
具体实施方式
现在将详细参照本发明的示例性实施例。只要可能的话,相同的标号将被用于在所有附图中指示相同或相似的部分。
本发明的不同实施例都是针对为无线设备提供数据以及/或者从无线设备访问数据。术语“无线设备”是指能够利用无线通信链路访问数据的任何设备。举例来说,无线设备包括个人数字助理(PDA)、袖珍个人计算机(PC)、掌上型计算机以及移动电话。许多不同的平台及通信协议可以与本发明的实施例一起使用,诸如Palm OS、微软(Microsoft)操作系统(Windows Mobile(WM)、Pocket PC、WindowsMobile Smartphone以及Windows CE)、Symbian(UIQ和诺基亚的60系列、80系列以及90系列)、Java(Java 2平台、小型版(J2ME)(MIDP1和MIDP2两种)以及RIM)、无线二进制运行环境(BREW:Binary Runtime Environment for Wireless)、WAP 2.0、QualeommTrig ML以及Linux。对于基于语音的通信,可以使用码分多址(CDMA)、时分多址(TDMA)以及全球移动通信系统(GSM)通信协议。上述通信协议都是针对语音通信的。对于基于数据的通信,可以使用1xRTT、1xEV-DO及1xEV-DV(用于CDMA网络)、通用无线分组业务(GPRS)以及增强的数据GSM环境(EDGE)(用于GSM网络)通信协议。因此,下述实施例将结合这些平台和通信协议来阐述。然而,应该认识到的是,本发明的实施例可以被扩展到在通信链路上通信的其他技术,包括非无线技术。应该进一步认识到的是,各个实施例对于不同设备、不同操作系统以及不同通信协议的外观和操作是不同的。同样,下文中提供的实施例只用于说明的目的。
[020]本发明的各个实施例也针对程序启动程序、应用程序、频道以及插件等。插件通常为用户管理特定类型的内容,诸如天气、新闻、体育、电影、411以及地图。插件可以把自己注册在无线设备120的注册表里,这就允许程序启动程序(将被描述)知道插件的存在,并且在需要的时候有计划地执行插件。频道通常管理所有内容的用户特殊设定。同样,频道经常被作为给定插件中的可选实体来提供。例如天气频道存在于天气插件中,其中频道由地理位置或预报类型(例如7天预报、2天详细预报、滑雪报告等)定义。应用程序包括插件和相关频道的分组。因此,应该认识到,术语插件和频道可以被解释为被称为应用程序的更高级程序的数据管理子例程。由于不同提供者可以提供单独的应用程序(具有相应的可选插件及频道),因此也可以提供程序启动程序。程序启动程序知道给定无线设备上应用程序、插件以及/或者频道的存在,这优选地通过周期性检查无线设备上的注册表而实现。为了讨论,程序启动程序、应用程序、频道以及插件(包括对应于这四类中任意一类的第三方产品)将被整体称为“软件组件”,因为它们每个形成无线设备上可操作的软件的一个组件。就像本领域技术人员在阅读了本公开内容之后很容易理解的那样,可以将本发明的各个实施例与其他软件组件一起使用。
附图1(包括子图1A和1B)的方框图显示了根据本发明第一实施例的无线数据访问架构。一般地,“架构”可以指服务器(例如数据业务提供者的服务器)和运行在服务器和/或无线设备上的组件。附图1所描述的架构包括数据业务提供者110(Handmark.com),其通过无线通信链路(例如无线因特网)与多个无线设备120通信。此外,数据业务提供者110可以通过硬连线或无线通信链路(例如本地因特网)与一个或多个内容提供者100通信。这种无线数据访问架构可以和本发明的各个实施例中的一个或多个一起使用,具有或没有附图1B所概述的著名的处理性能。使用这种无线数据访问架构的示例性实施例将在下文中被更为详细的描述。
本发明的第二实施例是针对减少无线设备120和数据业务提供者110之间所传输的数据量。更具体地,所传输数据的减少可以通过以下方式来实现:(I)增加存储在无线设备120自身上的数据量(最好是最大量);以及/或者(II)减少从数据内容提供者100和/或数据业务提供者110提供给无线设备120的数据量(最好是最小量)。举例来说,与传统的网页相比,应用程序文件可以被存储在无线设备120上,而不是每次无线设备120访问数据源时被传输。在这点上,应用程序文件可以包括数据和/或技术单元,例如:
■在无线设备120上存储在无线设备120上客户端应用程序中的数据显示单元,包括:
■图标
■格式以及/或者模板
■表格、列表、分数表(box score)、比赛结果表(standing)等。
■用户接口导航单元,包括:
■按钮
■滚动工具以及相应子例程
■设备特定的用户导航单元(包括触摸屏)
■与无线设备120上硬导航键的集成。
■用于管理被呈现在无线设备120上的数据的数据,包括:
■基于明确(express)用户选择的用户首选项
■基于无线设备120或无线设备120上应用程序的先前使用的用户首选项(例如,基于先前使用模式的自动更新持续时间)
■从无线设备120的其他应用程序获得的其他数据(例如,存储在无线设备120上的本地联系人/地址列表)
■在初始化过程中,利用LBS来确定当前的邮政区码,然后自动填充相应的用户首选项(例如,创建当地的天气预报,查找距离该地最近的X个电影院,查找紧邻该地的运动队等)
■高速缓存的先前查询结果
■技术,包括:
■用于响应于查询而组合数据组件以呈现给用户的通用子例程
■用于解释从服务器传递的数据的逻辑,使得可以利用无线设备120上的单元以有效并且可以理解的方式显示其
在这种方式中,仅有更新无线设备120上呈现所需要的状态/更新信息被从数据业务提供者110通过无线通信链路发送给无线设备120。根据本发明的一个实施例,全部的呈现信息被从内容提供者100提交给数据业务提供者110(例如,在25Mb+的文件中)。随后,数据业务提供者110只提取出无线设备120的状态/更新信息(例如,在少于15kb的文件中),这些状态/更新信息随后被发送给无线设备120。替代地,内容提供者100可以在向数据业务提供者110提供这些信息之前只提取状态/更新信息。
为了更完整地阐述这个被发送数据最小化的概念,示例性的天气报告插件/频道200被显示在附图2中。例如,这种天气报告可以包括无线设备120上的呈现,在此用户已经利用无线设备120访问给定地区的天气报告。用于不同天气条件(例如雨、雪、多云、晴等)的图标210以及页面格式信息或模板(例如对于高和低温度,图标出现在哪里等)可以在访问天气报告之前被存储在无线设备120上。于是,为了在无线设备120上显示天气报告,无线设备120只需要从数据业务提供者110检索预报数据(数据业务提供者110可以从内容提供者100检索预报数据)。换句话说,图标210以及页面格式信息不需要被发送给无线设备120以呈现对用户请求的响应。因此,本实施例实现了在页面被访问时从数据内容提供者110发送到无线设备120的数据量的减少,并且也实现了响应用户请求所需时间量的减少。
[025]附图3的流程图显示了一种在无线设备120上呈现用于软件组件的数据的方法,这种方法利用了无线设备120和数据业务提供者110之间所发送的数据量的减少。特别地,在步骤310中,利用无线设备120访问数据。例如,步骤310可以包括用户发起对于附图2所示的天气报告200的请求。为了把天气报告200呈现给用户,必须由数据业务提供者110把数据提供给无线设备120。该数据可以被划分为下文所述的第一类型和第二类型。
在步骤320,无线设备120(或运行在无线设备120上的应用程序)以及/或者数据业务提供者110识别无线设备120用于呈现所请求信息的第一数据类型以及第二数据类型。第一数据类型包括必须从数据业务提供者110检索的数据。举例来说,第一数据类型可以包括所需要的状态/更新信息(例如,给定日子的天气条件)。第二数据类型包括已经被无线设备120检索、或者否则被呈现在无线设备120上的必要数据。举例来说,第二数据类型可以包括前述的应用程序文件、图标210等。进一步可以考虑的是,本实施例可以评价第一数据类型并且把“当前”状态/更新信息重新分类为第二数据类型的一部分,因为如果先前所检索的状态/更新信息已经是最新的,则没有必要更新先前所检索的状态/更新信息。进一步可以考虑的是,第一数据类型可以包括对应于“新”数据的数据。举例来说,在上午9点,可能有九十条新的新闻报道。在上午10点,可能只有十五条另外的新闻报道或者已经改变的新闻报道。因此,在上午9点,对应于九十条新闻报道的数据落入第一数据类型中,在上午10点,只有十五条新闻报道落入第一数据类型中。
如上所述,无线设备120和/或数据业务提供者110可以识别第一数据类型和第二数据类型,例如作为无线设备120与数据业务提供者110处的服务器之间交互的结果。优选地,步骤320在无线设备120上或者由无线设备120自动执行,并且作为向数据业务提供者110请求对应于第一数据类型的数据的请求的一部分被传送到数据业务提供者110。然而,进一步可以考虑的是,作为步骤320的一部分,提供用户相关数据。用户相关数据可以包括,例如:(I)用户在无线设备120的应用程序中明确设定的用户首选项;(II)根据用户先前对应用程序或无线设备120的使用所确定的数据;(III)从无线设备120上其他应用程序可获得的数据(例如位置);或者(IV)(I)到(III)中一个或多个的组合。举例来说,无线设备120可以提供可用于向用户呈现的数据的列表,诸如无线设备120的给定半径内的电影院列表。于是,用户可以选择可用数据列表的子集,诸如用户最喜欢的两个电影院。于是,第一数据类型包括所选择的数据(例如对应于所选中的两家电影院的电影列表)并且排除未选择的数据(例如对应于其他电影院的电影列表)。其他用于识别第一数据类型和第二数据类型的技术也可以被考虑。
一旦在步骤320中已经识别第一种和第二数据类型,则无线设备120(以及/或者通常是系统)随后在步骤330中从数据业务提供者110检索对应于第一数据类型的数据。举例来说,无线设备120可以通过无线通信链路联系数据业务提供者110,并且请求对应于第一数据类型的数据。数据业务提供者110可以鉴权来自无线设备120的联系,并且在数据业务提供者110和无线设备120之间通信期间保持联系(例如,管理无线通信链路)。
[029]优选地,响应于来自无线设备120的请求,数据业务提供者110确定必需的内容提供者100。随后,数据业务提供者110从内容提供者100检索数据,分析所检索的数据,确定所需要的信息和/或更新,组合数据用于传输,并且把数据传输给无线设备120。如果无线设备120和数据业务提供者110之间的通信涉及电子商务活动(例如购买电影院的票等),数据业务提供者110可以处理电子商务交易并且把电子商务收据传送给无线设备120和/或用户的其他电子邮件账号。
[030]在收到来自数据业务提供者110的数据之后,无线设备120可以解释数据,以确定是否存在任何遗漏的要素。解释程序通常是指无线设备120上的一个应用程序,用于评价所接收的数据,以确定需要什么其他显示要素(例如,如果数据代码表示晴朗,应用程序必须确定这点,并且知道为那个特定日子显示太阳图像)。于是,遗漏的要素可以从数据业务提供者110被重新请求。当数据发送完成时,无线设备120可以关闭与数据业务提供者110的联系。执行步骤310的其他形式也可以被考虑。
在步骤340中,无线设备120上的应用程序进一步从无线设备120自身(例如,从闪存等)检索对应于第二数据类型的数据。这些数据被聚集用于在无线设备120上呈现给用户(例如,作为返回的内容结果),并且在步骤350中被显示在无线设备120上。步骤350之后可以有其他处理步骤,诸如更新无线设备120上的数据库,在无线设备120上显示后续消息,以及/或者更新无线设备120上的各个软件组件。
由于对应于第二数据类型的数据不是从数据业务提供者110被检索的,因此,必须由无线设备120从数据业务提供者110检索的数据总量可以被减少,从而提高了无线设备120的效率和性能。
根据本发明的另一实施例,可以为无线设备120(特别是运行在无线设备120上的一个或多个应用程序)配备数据链接能力,用于集成无线设备120上的一个或多个不同插件/频道或者应用程序。短语“数据链接”是指具有在无线设备120的多个资源之间链接数据或者与无线设备120上的多个资源交换数据的能力的无线设备120(或者运行在无线设备120上的应用程序),包括在应用程序启动程序和应用程序或应用程序中的插件/频道之间,在相同或不同应用程序中的一个插件/频道和另一插件/频道之间,在无线设备120上的应用程序(或应用程序内的任何插件/频道)和其他应用程序(例如第三方软件)之间,或者这些交换的某种组合。在所用的数据重叠的情况下(例如,只需要输入一次通用数据,这些通用数据在软件组件之间被转发),这允许用户从一个软件组件无缝切换到另一个软件组件。
为了更为完整地阐述这个概念,日历/地址本应用程序以及地图绘制/行驶方向信道/插件之间的数据链接将在下文描述(通常涉及频道/插件到第三方应用程序的数据链接)。无线设备120可以包括地图绘制/行驶方向频道/插件,诸如附图4(即附图4A-4H)所示的示例性地图绘制/行驶方向频道/插件。无线设备120也可以包括日历/地址本应用程序,其包括个人信息管理(PIM)应用程序、基于Palm操作系统的设备中所提供的地址本等。其他日历/地址本应用程序以及地图绘制/行驶方向频道/插件也可以被考虑。
[035]用户可以访问他/她的日历以查看即将到来的日程安排,诸如2005年7月4目前往密苏里州堪萨斯城的商务旅行等。如果无线设备120也配备有地图绘制/行驶方向频道/插件,则用户可以利用日历/地址本应用程序来查询堪萨斯城会议信息,这些数据随后被地图绘制/行驶方向频道/插件用于在无线设备120上为用户呈现驾驶方向或地图。这种与地图绘制/行驶方向频道/插件的数据链接的概念将在下文中参照附图4进行更为详细的描述。
举例来说,当密苏里州堪萨斯城访问的工厂的地址最初是通过导入(pull up)日历/地址本应用程序中的日程安排信息来显示时,本实施例可以为用户提供多个导航和/或交互选项,诸如链接、按钮或菜单选择项(定位(MapIt)[到频道数据链接],添加(AddIt)[到第三方应用程序数据链接],拨号(DiaIIt)[到第三方应用程序链接],以及/或者定向(DireetIt)[到频道数据链接]等)(附图4A)。定位(MapIt)功能自动加载应用程序中的地图绘制插件/频道,填充(popuIate)所需字段,并且向数据业务提供者110发起请求以返回地图。定向(DireetIt)功能自动加载应用程序中的行驶方向插件/频道,填充所需字段,并且向数据业务提供者110发起请求以产生方向,如将在下文中参照其他实施例所描述的。添加(AddIt)功能自动把联系信息添加到无线设备120上的任何第三方地址本应用程序中。最后,如果无线设备120中的无线语音能力可用的话,拨号(DiaIIt)功能利用无线设备120中的无线语音能力自动拨打联系信息中所提供的电话号码(不管用户是否把信息存储在无线设备的地址本中)。在所有的这四个功能中,信息被从日程安排链接到接下来的应用程序或频道/插件,即包括插件/频道的应用程序以及无线设备120上的其它应用程序被“数据链接”,以在无线设备120的使用中为用户提供更高的效率和更强的功能。
类似地,数据链接可以和先前描述的天气插件/频道200一起使用。举例来说,用户可以从无线设备120上的日历/地址本应用程序、旅游插件/频道或者地图绘制/行驶方向插件/频道中的链接(或诸如按钮或菜单项之类的其他导航单元)来启动天气插件/频道200,以取得关于屏幕内所指定位置的天气报告,其中天气插件/频道200从这个指定位置被启动(例如先前示例中的堪萨斯城)。
本领域技术人员将认识到,当前所述的数据链接与链接网页至少在以下点上是不同的,即涉及不同的数据源(即独立网站对单一源),呈现方法不同,无线设备120的数据累积对已知因特网浏览器中的个别呈现,无线设备120的数据保持对已知因特网浏览器上的过期网页,以及与本实施例、它的插件/频道、无线设备120上的其它应用程序以及/或者它们的组合所呈现的数据的交换和交互。此外,当单独的插件/频道被链接时,插件/频道之间的数据交换格式实际上与访问后续网页时通过HTML通用数据把后续网页提供给同一因特网浏览器所用的数据交换格式不同,举例来说,插件/频道链接通常既需要数据共享又需要调用以导入第二插件/频道。其他的区别也存在。
现在参照附图5所示的流程图来描述一种在无线设备120上的软件组件之间链接数据的方法。特别地,在步骤500中,无线设备120加载第一软件组件,诸如前面所述的天气插件/频道、地图绘制/行驶方向插件/频道、日历/地址本应用程序等。步骤500可以通过用户利用无线设备120选择软件组件而被启动,或者响应于用户所采取的动作(例如,在设备加电时所执行的缺省操作)而被启动。
[040]在步骤510,无线设备120(或者更具体地,运行在无线设备120上的应用程序)从数据业务提供者110检索数据,以用于步骤500中所加载的第一软件组件。举例来说,应用程序可以以前面参照附图3所描述的方法所述的方式检索数据。
在第一软件组件运行过程中的某个点上,无线设备120上的应用程序(例如第一软件组件自身)可以启动调用,以加载第二软件组件。举例来说,正在查看411插件/频道(第一软件组件)内的地址的用户可以选择用于如前面参照附图4H所述的地图绘制/行驶方向插件/频道(第二软件组件)的“定位(MapIt)”。在步骤530,响应于步骤520中所发起的调用,第二软件组件随后被加载。
在第二软件组件加载过程中或在加载已经发生之后,在第二软件组件和第一软件组件之间交换所链接的数据一其可以被从第一软件组件转发到第二软件组件,或者由第二软件组件从第一软件组件检索。举例来说,日历/地址本应用程序(第一软件组件)可以与地图绘制/行驶方向插件/频道(第二软件组件)交换地址信息(所链接的数据)。在这点上,应该认识到,为了进行数据链接,由第一软件组件所检索的数据中至少一部分必须被链接到第二软件组件。因此,可以考虑,由第一软件组件所检索或呈现的数据中的一部分不被链接到第二软件组件。类似地,可以考虑,第二软件组件可以从数据业务提供者110或无线设备120上的其它软件组件检索对于呈现用户的与第二软件组件相关的请求的响应所必需的附加数据。其它变更也可以被考虑。
这种数据链接性能在附图10中被进一步显示。特别地,在屏幕1000中,用户将数据输入到411频道/插件,并且向数据内容提供者110发起请求。在屏幕1010,数据被返回给411频道/插件,并被相应的解释和显示。在屏幕1020中,用户发起请求地图绘制/行驶方向频道/插件的动作。411频道/插件随后调用地图绘制/行驶方向频道/插件,地图绘制/行驶方向频道/插件被启动/激活。在屏幕1030中,在411频道/插件和地图绘制/行驶方向频道/插件之间交换数据,并且由地图绘制/行驶方向频道/插件向数据内容提供者110请求补充的数据。数据随后被返回给地图绘制/行驶方向频道/插件,并被相应地解释和显示。
通过提供出色的数据链接能力,无线设备120必需从数据业务提供者110检索的数据量可以被减少(例如,已交换的信息不需要被重新检索)。此外,通过自动交换所链接的数据,无线设备120提高了效率、易用性(用户不必再次键入数据)以及智能性(无线设备120上的应用程序已经提高了生产率,因为它们可以利用无线设备120上而不仅是给定软件组件内的可用数据)。同样,所公开的数据链接能力提高了无线设备120的操作和性能。
[045]本发明的另一实施例是针对涉及著名程序启动程序软件组件的特征。特别地,程序启动程序可以用作(I)管理、呈现、启动以及关闭所有插件的集合体(aggregator)或框架;(II)公共数据输入,检索以及管理的单点,诸如用户简档;(III)频道公共的例程和特征的资源,诸如自动更新调度机制;(IV)无线设备120和数据业务提供者110之间的公共接口,以帮助他们之间通信的管理;(V)与用户的通信和/或交易(例如电子商务)的集中位置;以及/或者(VI)更新无线设备120上某些或所有软件组件的机制,包括更新现有插件/频道,添加新插件/频道,删除旧插件/频道,以及/或者实现新特征。在这点上,程序启动程序可以通过任意数量的应用程序接口(API)与插件/频道通信。一种程序启动程序API包括“更新内容(UPDATECONTENT)”,其例如启动插件/频道,执行缺省的更新并返回到程序启动程序。当每个插件/频道连续更新时,这可以被用于应用程序中数据的完全更新。另一种这种API包括“启动(LAUNCH)”,其启动插件/频道,并且在用户退出插件/频道时返回到程序启动程序。这使得用户可以查看插件/频道中的内容并返回到程序启动程序中的插件/频道列表。换句话说,程序启动程序呈现插件/频道按钮,随后,当被点击时,插件/频道被启动,当插件/频道被关闭时,用户返回到缺省的插件/频道或是插件/频道列表。再另外一种这种API包括“检索更新摘要(RETRIEVEUPDATESUMMARY)”,其从插件/频道检索上次内容更新时间以及更新的简短摘要。这将使得程序启动程序可以显示所列出的插件/频道中上次更新的摘要以及日期/时间。最后一种这种API包括“用户信息(USERINFO)”,其针对访问/更新用于账号验证的公共用户信息以及所有应用程序上插件/频道中所使用的其他缺省数据的装置。这可以仅仅是所有应用程序将访问其以便取出缺省的位置设置和账号管理信息的数据库。
[046]优选地,程序启动程序将通过至少两种方法之一来调用插件/频道,这两种方法即子调用(SysAppLauch)方法以及切换(SysUIAppSwitch)方法。“子调用”方法期望当插件/频道退出时控制被返回给程序启动程序。这种方法可以被用于插件/频道没有被完全启动的情况,诸如通知插件/频道与代理服务器进行更新或者显示对话(如果需要的话)。相反,“切换”方法优选地将控制移交给插件/频道本身。在插件被完全启动时,可以使用这种方法。在“切换”调用下,控制一般仅在插件/频道通过SysUIAppSwitch明确启动次序启动程序时才被传回给程序启动程序。应该认识到,通过“切换”方法调用插件/频道就使得插件/频道可以访问全局变量。因此,在“切换”方法调用过程中,在发出SysUIAppSwitch调用之前,调用应用程序应该使用MemPtrSetOwner以将参数块(如果有的话)的所有权改变给操作系统,从而确保存储器在插件/频道被调用之前不被释放。通常,这只在参数块被使用时被应用。应该认识到,上述系统调用都是Palm操作系统特定的。类似的机制被用于其它平台,但具有不同的名称。
本发明的再一实施例是针对无线设备120的定制。以附图2所示的天气插件/频道200为例,用户可以购买这个插件/频道,并且重新编程具有天气插件/频道的无线设备120上的硬按钮(hard button)。一旦被重新编程,敲击一次硬按钮就启动天气插件/频道200,并且敲击两次就启动天气更新(类似于snappermail应用程序)。然而,如果用户已经安装了程序启动程序,则程序启动程序可以在硬按钮上被重新编程,并且点击按钮两次将启动插件/频道的无线更新。其它配置也可以被考虑,诸如在信息上点击、按下无线设备120上的菜单按钮等。在这点上,任何用于启动功能的方法都可以被应用,诸如激活无线设备120上的触摸屏、利用无线设备120上所提供的其他导航/输入方法(例如,在Treo 600上所呈现的5路导航设备)等。
应该认识到,除了前述技术之外,可以以许多其他形式进行定制。定制可以包括插件或频道内字段的自动填充。举例来说,无线设备120可以用用户的缺省位置自动填充内容频道。一旦用户输入他们的缺省邮政编码,这个邮政编码将自动传递该位置的因特网内容。举例来说,用户输入94022作为他们的缺省邮政代码,并且在天气插件/频道中为Los Altos,CA地区创建“当前和7天”天气预报。
根据本发明的另一实施例,可以创建公共数据库,用于存储程序启动程序和插件/频道访问的数据。由于插件/频道可能在没有程序启动程序的情况下被安装,所以如果数据库不存在,则插件/频道和程序启动程序都可以能够创建该数据库。
[050]公共数据库通常包含账号信息以及对于一个以上软件组件公共的数据,包括将被程序启动程序或用户设定的首选项,诸如缺省的城市、州、邮政分区等。公共数据库也可以包含用于管理插件/频道的数据,诸如每个插件/频道的概况记录,其中程序启动程序将访问该记录,以显示插件/频道信息的加亮。对于天气插件/频道200,这可能仅仅是当天的最高、最低以及当前温度。可以用命令来对每个插件进行子调用,以通过代理服务器更新它的信息,从而确保概况记录是最新的。概况记录可以包含下列信息:插件的创建者标识符,诸如“天气”之类的插件简短描述,诸如“当前:85,最低:72,最高:89”之类的插件概况详细信息,上次更新的时间戳等。
根据本发明的另一实施例,该公共数据库可以包含用于插件/频道管理的插件/频道注册记录。每个记录可以包含已注册的插件/频道的创建者标识符。插件/频道可以负责确保它被注册,从而程序启动程序将能调用和管理它。如果程序启动程序找到不再有效的注册(插件/频道已经被移除),则程序启动程序可以把该记录从数据库中移除,从而允许数据业务提供者110打开或关断插件/频道。公共数据库的实现可以是具有不同类型记录(上述的)、并且每个记录具有“类型”字段的一个数据库。可选地,每个类型的记录可以驻留在相同数据类型的单独数据库中。应该认识到,每个插件/频道可以(附加地或替代地)创建、维护并/或使用它自己的数据库,和存储数据的记录格式,诸如从数据业务提供者110检索的详尽数据。进一步可以考虑,将在无线设备120上所创建的简档上载给数据内容提供者110。如果用户随后更换到不同的无线设备120,则新的无线设备120将能够从数据内容提供者110检索简档,从而不需要用户重新输入首选项。
根据本发明的再一实施例,程序启动程序用下列启动代码之一来调用插件(子调用或切换):“sysAppLaunchCmdNormalLaunch”和“sysAppLaunchCmdUpdateInfo”。当插件/频道将被完全启动时,程序启动程序以sysAppLaunchCmdNormalLaunch来调用SysUIAppSwitch。通过这种方法进行调用确保了插件/频道具有访问全局变量的权利(即,调用方法导致全局访问)。在调用之后,插件/频道如所设计的那样执行。用户可以通过敲击“完成(Done)”按钮或等效图标来返回到程序启动程序。如果用户通过敲击屏幕上的“完成(Done)”按钮或任何其他方式来退出插件,则插件优选地显示主屏幕。
sysAppLaunchCmdUpdateInfo启动代码是定制的启动代码。程序启动程序和插件/频道代码可以包含该启动代码的定义“#definesysAppLaunchCmdUpdateInfo 0x8001”(特定于Palm操作系统的示例)。程序启动程序利用sysAppLaunchCmdUpdateInfo来调用SysAppLaunch,以请求插件/频道更新它在相关数据库中的概况记录(假设可以有多种数据结构)。程序启动程序可以在调用每个插件/频道之前建立网络连接到数据业务。随后,程序启动程序可以在同一网络连接过程中为每个插件/频道保持网络连接打开足够长的时间以进行更新。每个插件/频道也应该调用NetLibClose,并且在将控制返回给程序启动程序之前为即时参数传递“false”。在本实施例与Palm操作系统一起使用的情况下,插件/频道应该通过从它的PilotMain功能返回零或错误代码,而将控制返回给程序启动程序。
程序启动程序优选地提供一个或多个下列功能:
1.为程序启动程序和/或插件/频道维护/管理数据的接口。
2.调用、管理、关闭、子调用每个插件/频道,以根据需要或通过预定的更新,请求业务提供者更新插件/频道。
3.在程序启动程序、插件/频道或两者之间(根据需要或通过预定的更新)启动、管理和关闭与数据业务提供者110的连接。
4.显示来自每个插件/频道的概况信息。
5.启动任意给定插件/频道的能力。
6.添加/删除插件/频道的能力。程序启动程序可以通过业务提供者发现新的插件/频道,并且在用户需要它们时下载它们或删掉不再可用的插件或频道。
7.无线设备120和服务提供者110之间的鉴权。
8.管理业务提供者110和用户之间的通信(例如消息、使用的显示项以及终端用户授权)。
9.在需要时,更新当前程序启动程序和插件/频道。
10.更新所有功能。
11.自动更形功能。
其他特点和配置也可以被考虑。
[055]附图6显示了可与前述程序启动程序一起使用的航班信息插件/频道的屏幕快照。在这点上,应该认识到,用户优选地能够从不同途径访问来自特定插件/频道的数据,以取得用户所希望的最终信息。例如,在航线插件/频道中,用户可以通过航班号、时间或机场来获取信息。用户也可以具有向业务提供者搜索必要信息(例如,航班信息的航线代码)的能力,并且在选择后,信息被自动添加到主搜索标准中。
[056]优选地,当航班插件/频道被启动时,它缺省显示附图6A所示的“通过航班号查找航班”屏幕,并且日期缺省为今天的日期。用户选择日期并输入航线代码和航班号以搜索航班。如果用户不知道航线代码,则用户可以按下“Lookup(查找)”按钮,这将显示航线代码查找页面。随后,用户输入航线名称,接着按下搜索按钮以检索附图6B所示的航线列表。用户将选择航线,并按下“OK”按钮,这将把它们带回到查找航班页面,其中填充了航线代码。用户将按下“Search(搜索)”按钮以搜索所请求的航班信息。
如果用户选择机场-机场按钮,则搜索区域将变为显示附图6D所示的日期、出发时间、出发机场代码以及到达机场代码。日期应该缺省为今天的日期。用户可以利用下拉列表来选择日期和到达或出发时间。示例的时间选择如12am-6am,6am-12pm,12pm-6pm或者6pm-12am。用户可以点击“Lookup(查找)”按钮以搜索落在所定义的搜索内的航班。在选择时,它填充到前述查找航班中的字段中。
如果在搜索中找到一个以上航班,则应该如附图6F中所示的那样显示列表。这个列表与程序启动程序和/或插件/频道(黄色选择,5路,等)中的所有其他列表一样。左侧5路的“完成(Done)”按钮应该使用户返回航班搜索页面。如果在搜索中(如在航班号搜索中)只找到一个航班,则程序启动程序应该直接导航到航班概述页(见附图6G),并跳过航班列表(见附图6F)。如果找到多个结果,则用户可以进行选择,以获得所呈现列表中特定项的概述信息。举例来说,这可以包括点击触摸屏上的项,用手持机按钮高亮显示所期望的选项等。例如,航班概述页面如附图3G所示。
附图6G所示的航班概述页面显示了所检索的信息的到达和出发时间。它也允许用户用“Update(更新)”按钮来更新信息,或者通过“Details(详细信息)”按钮展开更多信息,诸如登机口、领取行李、当前航班状态等。对于每个到达/出发,航班查询返回4次。示例的显示格式包括:
1.如果检索到“实际时间”,则事件(出发/到达)已经完成。因此,文本应该是“8:30am离开ATL”或“9:43am到达DFW”
2.如果没有实际时间,则事件还没有完成。在这种情况下,将有“预定时间”,并且也可以有“估计时间”
a)如果没有估计时间,则为“预定在9:30am出发”
b)如果有估计时间的话,则为“预计在9:30am出发,并估计在9:45am出发”
[060]根据本发明的一个实施例,通过不同方式为用户提供检查没有被呈现在概述页面上的任何可用的详细信息的能力。优选地,如果用户从概述页面(附图6G)点击“Details(详细信息)”,则另一查询将展开(例如启动与业务提供者的新连接或者直接从设备数据库或无线设备120上的其他软件组件检索相关数据)这个航班的完整详细信息。详细信息可以包括登机口、领取行李、膳食、航班意见、注销记录、膳食、准时性以及航班跟踪信息(纬度、经度、高度、飞机图片等)。该信息可以在这种可滚动格式中都是可用的,尽管它可能取决或不取决于将要描述的数据量,或是可能基于或不基于手边的特定插件/频道。
一旦所期望的航班被检索到,用户可以以不同的方式使用数据,包括把它发送给无线设备120上的其他插件/频道或第三方应用程序(通过数据链接)。例如,用户可以选择将其添加到他们的日历中。添加到日历中的信息可以包括航线、航班号、出发时间、到达时间、出发机场和登机口信息以及到达机场其中的一个或多个。
附图7(即附图7A-7G)显示了根据本发明另一实施例的具有前述程序启动程序的电影信息插件/频道的屏幕快照。第一个任务是搜索并显示用户所喜欢的电影院中的所有电影或特定电影的演出时间。优选地,这是用户提供的(通过选择特定电影院或提供其他相关地址信息)或从无线设备120所搜集的(例如无线设备120的当前位置)基本信息的一部分,所有这些信息或者是在查询时被请求,或者被存储在数据库中供插件/频道使用。用户可能最初对电影列表感兴趣,电影列表包括电影名字、类型、级别、播放时间、演出时间以及电影院名称。其次,用户可能对电影的详细信息感兴趣,包括演员表、介绍等。因此,程序启动程序或插件/频道可以根据用户定义的首选项以及/或者它自身检测网络速度的能力来控制下载的数据量,使得,在本实施例中,该信息可以只在用户在搜索中选择了“包含电影详细信息”的情况下才可被提供,因为低带宽用户可能不想为所有电影下载该信息。在最初搜索中不展开完整电影详细信息的用户可以选择从所选中电影的电影详细信息屏幕中展开这些信息。用户也可能对与演出时间相关的电影院详细信息感兴趣。这包括地址、票价等。电影院的地址可以被链接到如先前针对数据链接所述的地图绘制/行驶方向插件/频道。用户也可以用同样的用户定义位置或电影院来搜索电影名字。在电影频道更新的情况下,更新过程将基于到主题的其他途径来更新所限定的电影院以及信息。因此,至少存在三种不同的更新类型:(I)在程序启动程序级更新所有信息,这更新所有插件/频道;(II)在插件/频道级,这只更新这个插件/频道(以及当前或缺省搜索的特定类型);以及(III)在插件/频道中,这只更新用户所需的详细信息。
第二个任务是搜索并显示用户所限定的位置或电影院中所有电影或特定电影名字的演出时间。这对旅游者很有用,他们通常不想搜索他们所喜欢的电影院列表之外的电影。用户可以用城市/州或邮政分区来搜索位置。如果搜索结果没有达到返回位置或演出时间的最大数目,则这将返回该本地地区中的所有电影(以及电影院/演出时间)。例如,在纽约有超过185家电影院,所以为这些电影院返回所有的电影是不可行的。因此,当输入这种搜索时,可以产生警告消息,警告消息通知用户输入更具体的搜索标准。这对于其他插件/频道也可以是适用的。例如,在411插件/频道上(附图9),如果返回太多由应用程序(服务器侧或设备侧)和/或其他方式(例如用户、带宽、设备可用存储器等)所定义的信息,则用户可以收到类似的警告消息。用户也可以用同样的用户限定位置或电影院来搜索电影名字。
附图7A显示了电影列表应用程序的主屏幕。“更新(Update)”按钮更新在他们的“我的电影院”列表中放映的所有电影的演出时间。“新搜索(New Search)”按钮将允许用户创建在用户限定位置上的演出时间搜索。该屏幕应该包括用户决定电影所必需的所有信息,但不更多。举例来说,这可以包括名字、类型、等级、长度、演出时间以及电影院。
[065]从演出时间列表(附图7A)中选择电影将显示附图7B所示的电影详细信息。换句话说,一旦最初的结果已经被返回,则用户将能够扩展所获得的信息,导航到特定细节,诸如演员表、导演、时间、发行日期、播放时间以及评论。用户可以选择“电影院”按钮,从而察看在演出时间搜索中所返回的有关电影院的详细信息(附图7C)。
如果用户选择不返回所有电影详细信息(在演出时间搜索中),则只显示名字、类型、等级以及长度。“电影详细信息(Movie Details)”的按钮将查询(例如启动到业务提供者的新连接或者查找本地数据库)电影的完整详细信息并显示其。从电影详细信息列表选择“电影院(Theaters)”(附图7B)就显示显示正在放映的电影(这在结果中被返回)的电影院的完整详细信息(附图7C)。从这里,用户应该能够选择电影院,并将它添加到他们的收藏列表(如果它在那里还不存在)或映射它。
[067]从主演出时间列表(附图7A)中的“新搜索(New Search)”按钮,用户将能够通过特定电影名字进行搜索,或者搜索特定位置(或电影院)的所有电影,或者使用他们的“我的电影院”列表进行搜索(附图7D)。由于这可能是动态形式,因此根据下拉选择来显示或移除字段(见附图7E)。从用户的观点来看,这将极大地简化用户接口(UI)。这举例说明了可以管理大量数据的另一方法——即,通过拥有动态形式/搜索查询、基于多种因素的数据呈现,其中多种因素包括可用带宽、用户首选项、主题以及到达主题的搜索途径等。电影院名称、城市、州以及邮政分区只在用户选择通过位置搜索的情况下才被显示。用户可以选择搜索特定电影院或者直接搜索城市/州或邮政分区位置。然而,对于结果的数量可以有限制,因而如果搜索结果返回太多结果,则用户可以被要求添加更多的标准。点击“搜索(Search)”按钮将运行搜索并显示演出时间列表。点击“完成(Done)”按钮将使用户返回到旧的演出时间列表。
“我的电影院”列表(附图7F)可以从任意列表页面的菜单进行访问。在这点上,每个频道和应用程序可以具有任意数量的与其相关联的唯一且应用广泛的“菜单(Menu)”项。通过激活特定无线设备120上的菜单功能而访问这些项。在本实施例中,用户可以输入电影院名称以及城市/州或邮政分区。用户也可能只输入城市/州或邮政分区。如果一家电影院被返回,则它将被添加到列表中。如果一家以上的电影院被返回,则将显示列表(类似于我的电影院列表),用户能够在这个列表上选择添加哪一家电影院(附图7G)。用户也可能从他们的“我的电影院”列表中选择电影院以及删除它,这是通过点击并保持(tap-and-hold)或使用移除电影院的下拉菜单,或者通过前述的任一其他的启动方法。
根据本发明的一个实施例,用户也可以能够经由无线设备120,通过从电影院列表插件/频道中的下拉菜单中选择合适的数量而购票。信息随后利用前述的数据链接而被传递给第三方应用程序。
[070]根据本发明另一实施例可与前述程序启动程序一起使用的地图绘制插件/频道的屏幕快照(道路、地形图或其他)被显示在如前所述的附图4(即附图4A-4H)中。当地图绘制插件/频道被启动时,根据用户的首选项,可以缺省显示附图4A(地图绘制)或4B(行驶方向所示的屏幕)。
以地图绘制插件/频道4A为例,用户可以输入适当的地址信息(或使用查找地址(Lookup Address)按钮),以检索显示在地图上的已输入位置(包括基于显示比例尺的周围区域,具有或没有特定位置的给定距离内感兴趣的地方/饭店/ATM/加油站等)。见附图4C的示例性的地图显示。根据本发明的一个实施例,整个地图程序(或者感兴趣区域的整个地图程序)被存储在无线设备120上,从而不需要从数据内容提供者110检索数据。当缩放(+Zoom-)特征被显示时,其他地图绘制特性也可以被提供,诸如感兴趣点(POI)的全景或刻画。
从附图4C的地图显示中,用户可以获得到给定的感兴趣位置的行驶方向。特别地,用户可以选择起点(Origin)或终点(Destination)按钮,从而以附图4B所示的格式输入地址。这可以包括在无线设备120的第三方地址本中查找的能力,诸如前面所述的那些,以便从另一应用程序检索地址。这种技术被显示在附图4E、4F和4G中,其中联系信息输入(例如前面所述的密苏里州堪萨斯城工厂访问)被用作获得地图的地址输入(附图4F)或行驶方向的起点/终点(附图4G)。
根据本发明的一个可选实施例,无线设备120包括位置识别能力(全球定位系统(GPS)或蜂窝塔式三角定位(cellular towertriangulation)),这可以被用于提供起点地址信息。在这点上,可以考虑使用GPS定位以及精度有限的类似技术(例如,只要如插件/频道所要求的那样精确)。举例来说,如果GPS位置被用于上述的地图绘制插件/频道,则GPS位置信息可以精确到一个城市街区。同样,如果GPS位置被用于电影院位置或天气,则GPS位置信息可以精确到一个邮政分区代码。
可以通过使用允许多种精度等级被请求的GPS应用程序编程接口(API)来实现受限的GPS精度。在这样一个实施例中,插件/频道能够设定它所需要的精度:
[075]对于天气:
//#helper.m_GetLocation=m_isLBS;
//#helper.m_gpsAccuracy=
HttpProxyHelper.GPS_ACCURACY_LOW;
对于电影:
//#helper.m_GetLocation=m_isLBS;
//#helper.m_gpsAccuracy=
HttpProxyHelper.GPS_ACCURACY_LOW;
对于地图:缺省的GPS请求是高精度并且优选地不被改变。
当设置GPS请求时,无线设备120能够核对查看插件/频道所需要的精度。
//# lf(m_GetLocation)
//# {
//# Gps.slartSesslon(thle);
//# Gps.requestPosition((Gps.SVC_TYPE_LOCATION);
//# switch(m_gps.Accuracy)
//# {
//# case GPS_ACCURACY_LOW:
//# Gps+setQoS(0);
//# Gps.setOptimizationType(GPS.OPTIMIZE_FOR_SPEED);
//# break;
//# case GPS_ACCURACY_MEDIUM;
//# Gps.setQoS(123);
//# Gps.setOptimizationType(GPS+OPTIMIZE_FOR_SPEED);
//# break;
//# caee GPS_ACCURACY_HIGH;
//# Gps+setQoS(255);
//# Gps.setOptimlzationType(GPS+OPTIMIZE_FOR_ACCURACY);
//# break;
位置信息随后可以由GPS提供,并被用于填充与给定插件/频道的字段相关的位置。例如,这可以与前面所述的地图绘制/行驶方向插件/频道一起使用。利用这种特性的地图和/或行驶方向的显示将在下文中更为详细地公开。
[080]利用所提供的位置信息(例如利用前述的技术),方向信息可以由地图绘制/行驶方向插件/频道以多种方式呈现。例如,可以提供图像以为用户提供每一步的直接识别(例如右转箭头),可以在所显示的地图上为用户显示加亮的路线,并且/或者可以为用户显示一组逐圈(turn by turn)的方向。可以通过从数据内容提供者检索路线信息来描述逐圈的方向。插件/频道可以包括声音特性,这可以通过无线设备120的扬声器或其他声音通信能力将指令读给用户。
附图8(即附图8A-8D)显示了根据本发明另一实施例的可以与前述程序启动程序一起使用的情节摘要/新闻插件/频道的屏幕快照。优选地,用户能够从附图8A所示的设定屏幕选择新闻的种类、每一类故事的数量(3,5或10)以及完整的或概略的故事。如果用户选择摘要,则用户仍然可以选择在查看摘要时下载整个故事。当用户选择故事时,整个故事或摘要将被显示(根据设定屏幕中的用户选择)。
附图8B所示的主故事列表显示了所有当前已经下载的故事以及上一次更新的日期/时间。用户可以通过任意多种方式来组织故事。可能的方式包括子频道或图标,诸如可以在左侧添加图标以识别新闻种类(例如标题故事、政治、科学、商业、世界、运动、娱乐等)。
如果用户在设置屏幕中选择只下载摘要,则显示附图8C所示的故事摘要页。如果用户点击“整个故事(Full Story)”按钮,则可以向业务提供者查询整个故事,并把用户带到附图8D所示的整个故事屏幕。“完成(Done)”按钮将把用户带回附图8B所示的主故事列表。注意,如果用户在设定屏幕中选择“整个故事(Full Story)”按钮,则不需要摘要屏幕,因为通常这不显示摘要。
除了没有“整个故事(Full Story)”按钮之外,附图8D所示的整个故事屏幕和附图8C所示的摘要屏幕类似,因为整个故事已经在无线设备120上了。如果用户在设定屏幕中选择“整个故事(Full Story)”,则当用户从主故事列表中选择故事时,这个屏幕被显示。当他们选择完成时,用户被带回附图8B所示的主列表。用户也可以下载故事的其他组件,诸如图片等,如果这种组件可用的话。
[085]如果用户通过从摘要屏幕按下“整个故事”按钮(从而请求整个故事)而导航到这个屏幕,则点击“完成”按钮使他们回到附图8B所示的主列表。
附图9(即附图9A-9F)显示了根据本发明另一实施例的可以与前述程序启动程序一起使用的411(类似于公共白页/黄页的电话列表插件/频道)插件/频道的屏幕快照。优选地,该插件/频道根据用户首选项(由用户在程序启动程序中设置)或先前的使用而默认为附图9A、9B、9C、9D以及9E中所示的搜索种类的其中之一,或者用户可以每次进行选择。这包括:
附图9A-找人。需要姓氏和城市。
附图9B-找邻居。需要门牌号、街道以及城市。这可以总是默认返回10个邻居,并且/或者是用户可定义的。
附图9C-找商家。需要名字和州。
附图9D-反向地址查找。需要门牌号、街道和城市。
附图9E-反向电话查找。需要10位数字电话号码。
优选地,附图9A-9E所示搜索中任意一种生成诸如附图9F所示的列表页。该列表页可以被以数据链接能力编码,其中选择所返回的信息将使用户能够执行下述中的一个或多个:
1.拨号(如果是智能电话则是缺省的)
2.将其添加到可用地址本中(如果不是智能电话则是缺省的)
3.对其定位
4.对其定向
此外,这些能力中的每一个还可以或者可以替换地通过下拉选择项或下拉菜单来提供。
先前的几种实施例是针对可以和无线设备120一起使用的特定插件/频道的。本发明的另一实施例是针对用于开发插件/频道自身的工具的。更具体地,本发明的一个实施例是针对插件/频道开发人员的工具包的,其中该工具包允许开发人员方便地为无线设备120(或运行在无线设备120上的应用程序)创建插件/频道。可以在开发工具包中提供注册码的重要(significant)部分,从而开发人员只需输入一些参数以使新的插件/频道被应用程序程序启动程序识别。在新插件/频道被应用程序程序启动程序识别之后,插件/频道可以接收并选择响应来自应用程序程序启动程序的更新消息。
[090]本发明的另一实施例是针对可以与前述开发人员工具包一起使用的类。“类”描述特定类型的对象。它可以包含相关的方法和/或变量。接下来的实施例针对示例性的类。
滚动支持助手(SupportScrolling Helper)类
该类允许开发人员仅仅通过从CSupportScrolling中导出并提供返回可视窗口总尺寸的方法而将对于垂直滚动的支持添加到他们的视窗类。此外,该消息也将管理处理由视窗所发送的滚动消息。使用这种类的一个示例是创建从CWindow导出的对象,并添加代码以从CSupportScrolling中导出。下面所提供的示例允许开发人员打开对话的滚动(在这个例子中是天气插件中的滑雪报告对话):
class CDtg SkiReport:
        public CDlaloglmpi<CDtgSkdReport>,
        public CSupportScrolling.
然后,用户为WM_VSCROLL消息添加句柄,并将它传递到基本CSupportscrolling类。
       LRESULT OnVScroll(UINT uMsg.WPARAM wParam.LPARAM IParam.
BOOL & bHandled)
     {
           CSupportScrolling::nVScroll(this,wParam,lParam);
           retum 0;
     }
最后,类执行被称为GetHeight( )的函数,该函数将返回可视区域的总高度。利用这个信息,基本类可以管理滚动的所有方面。应该认识到,自定义呈现应用程序的窗口中的滚动通常是代码密集的处理。很多时候,其通过从一个类剪切复制到另一个类而被实现。本实施例通过概括该成果而简化了开发人员将滚动支持添加到他们的类中的处理。
[095]滚动列表支持助手(SupportScrollingList Helper)类
该类允许开发人员仅仅通过从CSupportScrollingList中导出而将对于垂直滚动列表的支持添加到他们的视窗类。CSupportScrollingList从CSupportScrolling中导出,并利用该基本类的所有功能性。此外,它增加了对列表中所包含的可变数量项的识别,并管理所选中的项。CSupportScrollingList助手类允许开发人员提供对于垂直滚动的支持(从上述CSupportScrolling中导出)、以及对持列表概念的支持。这是通过CSupportScrollingList类中保持对当前所选中的项的跟踪的成员变量来完成的。为了提供对于所呈现项的滚动列表的支持,用户需要从CSupportScrollingList中导出。在此有来自天气插件中7天预报对话的示例:
class CDlgForecast:
       public CDlaloglmpl<CDlgForecast>.
       public CSupportScrollingList,
       public CSupportRenderedUILiat
随后,用户将需要确保所有的指示笔事件被传递到基本类。这使得基本类可以确定所选中的项是否需要改变。
LRESULT OnLButtonDown(UINT uMsg.WPARAM wParam,LPARAM IParam,
        BOOL & bHandted)
    {
          CSupportScrollingList::nLButtonDown(this,wParam,IParam);
          retum 0;
    }
    LRESULT OnLButtonUP(UINT uMsg,WPARAM wParam,LPARAM IParam.
BOOL & bHandted)
    {
          CSupportScrollingList::OnLButtonUp(this.wParam,IParam);
          retum 0;
    }
[098]用户通常也应该提供两种功能的执行,这两种功能将使下层基本类确定可视区域的尺寸。这些功能是GetItemSize()和GetNumItems()。返回适当的值通常是用户所定义类的责任。GetItemSize应该返回显示单个项所需要的尺寸。GetNumItems应该返回项的总数以显示。由于通过将这些函数的结果相乘在一起就为用户提供总尺寸,因此不需要提供如CSupportScrolling中所述的GetHeight()的实现。
最后,在屏幕呈现过程中,开发人员可以通过查询成员变量m_ndxSelected而确定当前选中哪个项。这将允许呈现函数以表示所选中项的方式呈现那个项(例如,黄色高亮)。
[100]呈现用户接口支持(SupportRenderedUI)类
该类允许开发人员仅仅通过从CSupportRenderedUI导出而为他们的视窗类提供对于所呈现图像的支持。CSupportRenderedUI将屏幕的可视部分存储为位图。开发人员在项滚动过程中获得重大的好处,因为只需要绘制它一次,从而滚动可以仅仅通过绘制位图图像的不同部分而完成。为了更全面地解释这个概念,在许多实现中,提供在无线设备120上的屏幕的大多数可以被呈现,而不是利用标准控制。这为开发人员提供了用户接口上的像素级控制。通过避免标准控制,开发人员可以进行更丰富的接口以显示期望的内容。在已知的技术中,这种处理导致更加困难并且更加耗时的开发过程。本实施例提供支持类,从而使得通过概括许多必要的编码来具有自定义呈现图像变得更加容易。
为了利用该助手类,用户应该从CSupportRenderedUI中导出。应该认识到,该类通常与CSupportScrolling联合使用,除非预计内容只存在于单个页面上。下面提供了利用CSupportRenderedUI的类的示例(天气插件中的天气警报对话):
class CDlgWeatherAlerts:
       public CDlaloglmpl<CDlgWeathetAlerts>,
       public CSupportScrolling.
       public CSupportRenderedUI
CSupportRenderedUI类管理图像是否需要被重绘。仅在该类的用户确定必需的情况下这才是必要的。缺省的实现方式允许用户呈现位图一次,并且如果出现滚动,则将从视图的前一位图开始绘制。这对于绘制图像密集型以及资源密集型的事物尤其有利,因为它只需要绘制一次,并且可以在周围被滚动,而不造成第二次呈现的开销。这是用基本类中用于维持绘制操作的必要性的布尔变量来实现的。用户类可以在呈现方法中检查这个变量,以确定他们是否需要重新呈现图像或者仅仅使用那里的图像。
SupportRenderedUIList(呈现用户接口列表支持)
[105]这种类使得开发人员可以仅仅通过从CSupportRenderedUIList导出而为所呈现的表示项列表的图像提供支持。CSupportRenderedUIList从CSupportRenderedUI中导出,并且利用该基本类的所有功能性。此外,它存储位图的被选中版本。例如,列表中的每个概念应该具有两种状态的图形表示:选中的和未选中的。所公开的列表支持一个被选中项的概念,其中当被呈现时,它应该从被选中的位图图像呈现。其他的东西通常从未被选中的图像中呈现。这是上述CSupportRenderedUI类的特殊版本。它增加了支持项列表的能力。它通常与CSupportScrollingList一起使用。它为用户类添加了另一种表示被选中项的位图。由于所公开的列表已经选择了项,所以如果用户在列表中来回移动,则视图的可见方面可以改变,即使下层内容不改变。如果呈现过程是资源密集型的,则接口可能看起来迟缓。这可以通过保持包含所有东西都被选中和没有东西被选中的视图的两个位图来实现。于是,呈现功能可以从适当的缓存图像中剪切和粘贴以呈现视图。为了提供对所呈现项列表的支持,仅仅从CSupportRenderedUIList中导出,如以下实例所示:
class CDlgForecast:
       public CDialoglmpl<CDlgForecast>,
       public CSupportScrollingUist,
       public CSupportRenderedUIList
除了呈现功能需要绘制所选中的位图和未选中的位图之外,其他方面都与CSupportRenderedUI的工作方式类似。
SupportRenderedForm(呈现格式支持)
这种类允许开发人员为自定义呈现格式(带有标签和数据域的窗口)提供支持。这种架构允许开发人员从CSupportRenderedForm类中简单地导出、定义某些文件并且使类管理绘图以及获得用户输入。一个示例性的屏幕定义如下:
m_strTltie=L″Mapping″;
m_fieldAddress.lnitialize(typeEdit,L″Address:″);
AddField(& m_fiedAddress);
m_fieldClty.lnitialize(typeEdit,L″City:″);
AddField(& m_fieldCity);
m_fieldState.Initialize(typeList,L″State:″);
AddFleld(& m_fieldState);
m_fieldCountry.lniuafize(typeList,L″Country:″);
AddFleld(& m_fieldCountry);
m_fieldZip.lnitialize(typeEdit,L″ZiP:″);
AddFlekd(& m_fiekdZip);
对于这种类,一个原因是脱离WM控制的“沉闷”外观。利用WM标准控制,每次在屏幕上只能显示一些域。相反,本实施例在屏幕上看起来吸引人,并允许与标准控制类似的功能。这是通过呈现来自开发人员描述(见上述代码)的格式以及使基本类确定何时需要编辑某些东西而实现的。根据类型,适当的控制被显示(typeEdit=编辑控制;typeList=下拉控制)。为了提供对所呈现格式的支持,开发人员应该从这种类导出(从天气插件中的新位置对话):
class CDlgNew:
       public CDialoglmpl<CDlgNew>,
       public CSupportRenderedForm<CDlgNew>,
       public CSupportRenderedUI
[110]这将允许用户添加代码以描述上述格式。用户随后应该为WM_PAINT添加消息句柄,并调用RenderItems(呈现项),RenderItems是在基本类中定义的,并且将呈现用户所指定的项。
   LRESULT OnPalnt(UINT uMsg,WPARAM wParam,LPARAM IParam,
B00L & bHandled)
   {
         Renderltems();
         retum 0;
   )
WndUpdateChannels
WndUpdateChannels是已经被开发用于添加对于拖放的支持的用户类。这是允许用户从更新中检测包含项或不检测例外。此外,如果用户点击并拖动一个项,则他们可以操纵更新的顺序。与上述其它类不同,这种类不是被用作为其他用户接口(UI)类的构件块的实用程序。它的主要功能是为管理插件是否应该从“更新全部(UpdateAII)”中被更新以及它出现在第一页(PageOne)中的顺序提供支持。这个实施例的一个好处是这种自定义控制允许用户拖放选中的项。
令牌分析(Token Parser)类(可用于J2ME)
这种类提供了从不同输入流读取的数据。它的通用属性使得开发人员能够利用它来分析来自文件或HTTP数据传递的数据。不同读取方法可以要求将数据转化成应用程序(或插件/频道)所希望的本地格式。这也可以被用于指定不同分隔符和字符编码(例如,ISO8859_1),从而在底层提供宽范围的灵活性。这种类能够识别和文本数据一起的被嵌入二进制数据(例如,PNG图像),从而允许开发人员混合这二者。见附录A的示例代码。
[115]以下概略示例显示了CacheFileTool(缓存文件工具)类以及HTTProxyHelper(HTTP代理助手)类的使用。这两种类都使用从令牌分析类继承的方法。以电影插件为例,最初,插件利用CacheFileTool从无线设备120中加载电影数据。当用户请求电影详情时,“helper”变量通过HTTP被连接到数据业务提供者110处的服务器,并且利用这种方法loadMovieDetails(Movie电影)以同样的方式利用读取所返回的数据。利用令牌分析方法通过电影对象读取这两种不同的数据源。
public class MoviesPlugln extends Ptugin
{
  protected CacheFileToil m_moviesCache;
  public HttpProxyHalpar helper,
  public Vactor movles://Movies for My THeater List
  public MoviesPlugln()
  {
    m_moviesCache=new CacheFlieTool();
    loadFromGsche();
  }
//利用从令牌分析导出的缓存文件工具从设备记录存储器载入
prtvate void loadFromCache()
{
  if(m_moviesCache.open(FageOneApp.MOVIES_STORE))
  {
         int count=m_movlesCache,raadlnt();
         for(inti=O;i<conut;l++)
         {
           movte=new Movie();
           movie.read(m_moviesCache,false,galse);
           if(movie.id.length()>0)
           {
             movtes addElemeni(movte);
           }
        }
     }
  }
//利用从令牌分析导出的HTTP助手类从HTTP载入
Parser
  publtc vold loadMovieDetalls(Movle Movie)throws EOFExoeption
  {
    if(ihelper.Valid())
      return;
    helper.SkipToStart();
    int count=helper.splliCountToken();
    for(int]=O;j<courit,j++)
    {
      helper.NextToken();
      movie.read(helper,true,true);
    }
  }
}
public final class Movie
{
       public String ld;
    public String name;
    public String runtime;
    public vold read(TokenParser file,bootean lndudeDetails,boolean fromServer)
throws EOFException
    {
    ld=file.readString();
    name=file.readString();
    runtime=file.readString();
    genre1=file.readString();
    genre2=file.readString();
    rating=file.readString();
//如果该数据来自服务器,则有条件地加载额外数据项
    if{fromServer && includeDetals}
    {
          hasDetalls=true;
          adviscry=file.readString():
          url=file.readString();
          sctor1=file.readString();
        }
     }
  }
[116]缓存文件工具类概述(可用于WM和JTME)
这种类可以从上述的令牌分析类中导出,并因此可以继承该功能。此外,这种类提供了对文件系统的读写能力。通过将通用读/写函数封装到这种类中,开发人员能够将所得到的接口从WM移植到J2ME环境。于是,可以利用这种类对数据对象编码,从而以基本相同的方式使用不同的文件系统,即使下层文件系统可能很不一样。下面提供了表示这种功能的示例代码。也可以见附录B中的示例代码。
将电影对象写入到记录存储器中的J2ME代码
public void write(CacheFileTool file)
{
file.write(clty);
file.wrtte(state);
file.write(zlp);
file.write(movleName);
file.write(theaterName);
file.write(theaterSearchType);
me,write(movleSearchType);
}
Windows Mobile C++代码:
void CWEMovleSettings::Wrtte(CacheFileTool & file)
{
file.Write(m_nMovieSearchType);
file.Write(m_strMovleName);
file.Write{m_bMovieDetails);
file.Wrtie(m_nTheaterchType);
file.Wrte(m_strTheaterName);
me.Write(m_strTheaterCity);
file.Write(m_strTheaterState);
file.Write(m_strTheaterZip);
}
[118]为了解释和描述的目的,已经提供了前面对本发明不同实施例的描述。这不是为了穷举本发明或者将本发明限制到所公开的确切形式,并且根据上述教导,修改或变型是可能的,或者可以从本发明的实践中获得。举例来说,可以提供任意数量的插件/频道,因而那些在上文描述中阐明的插件/频道是可以考虑的插件/频道中的一些示例。其他这类插件/频道也可以被考虑,诸如访问所选中的公司数据库(例如CRM)的插件/频道,这将允许某些职员(例如销售部门)在销售呼叫之前得到关于客户的记录数据,而不必须在无线设备120上拥有该数据。可以考虑的其他插件/频道包括投资管理插件/频道(例如证券报价机/行情更新)、体育信息、租车信息/预约插件/频道以及信息转发插件/频道(例如将预约转给秘书或其他感兴趣的人)。因此,已经选择并描述了实施例,以便解释本发明的原理以及它的实际应用,从而使本领域技术人员能够在不同实施例中使用本发明并具有适合可以考虑的特定使用的多种改进。
附录A
package com.handmark.express.common;
import.java.util.Vector;
import java.lo.UnsupportedEncodingException;
import java.lo.EOFException;
import net.rim.devlce.apl.lo.Base64lnputStream;
import java.lo.lnputStream;
//#ifdef debug
import de.enough.polish.utti.Debug;
//#endif
public class TokenParser{
 public int readPos;
 public boolean eof;
 public boolean error;
 private byte[]delimlter={V};
 public byte[]data;
 public byte[]binaryData;
 public String token;
 public String strLastError=**
 //TODO-119 should be 137
 public String encoding;
 public static finalint[]PNGID={-119,80,78,71,13,10,26,10};
 dass B64Data extends inputStream{
   //byte[]input;
   //int pos=0;
   public B64Data( ){
   }
   public int read()
   {
        char ch;
        ch=(char)data[readPos];
        if(ch==′|′)
         retum-1;
        readPos++;
        return ch;
    }
};
public TokenParser(){
 encoding=System.getProperty(″mlcroedltion.encoding″);
 if(encoding==null||encoding.equals(**))
 {
    //#ifdef debug.info
    Debug.debug(″TokenParser.constructor-no encoding defined-using ISO8859_1″);
    //#endif
    encoding=″ISO8859_1″;
  }
  resetParser();
 }
 public void resetParser()
{
  data=null;//allows gc to get rid of previous data
  binaryData=null;
  strLastEror=″″;
  token=″″;
  eof=false;
  readPos=O;
  error=false;
}
public void SetDelimlter(String strDelimiter)throws lllegalArgumentException
{
  if(strDelimiter==null||strDellmlter.length()==0)
    throw new lllegalArgumentExcaption(
      ″Delimiter muat be at least one character.″);
  try
  {
     delimlter=strDelimlter.getBytes(encoding);
  }
  catch(UnsupportedEncodingException e)
  {
    strLastError=″Unable to process request(Unsupported Encoding)″;
    //#ifdef debug
    Debug.debug(″HtipProxyPerser.SetDelimiter-unaupported encoding-″+
e.getMessage());
    //#endif
  }
}
//Returns the numeric part of a string formatted like″string-123″
public int splitCountToken()throws EOFException
{
  read();
  int pos=token.lasttndexOf(∵);//toksn-##
  if(pos<O)
     retum O;
  try
  {
    return integer.parsealnt(token.substring(pos+1));
  }
  catch(NumberFormatException e)
  {
    return O;
  }
}
public vold sklpTokens(int num)throws EOFException
{
  while{num->O)
    read();
}
public String NextToken()throws EOFException
{
  red();
return token;
 }
 public String readString()throws EOFExcsption
{
read();
    return token;
}
public int readint()throws NurnberFomratExoeption,EOFException
{
    read();
    return integer.parselnt(token);
}
public boolean readBoolean()throws EOFException
{
    read();
    if(″Yy1Tt″.indexOf(token.charAt(O))>=O)
        return true;
     return faise;
}
public integer readlnteger()throws NumberFornatException.EOFException
{
  read();
  return lnteger.valueOf(token);
}
public long readLong()throws NumberFormatException.EOFException
{
  read();
  retum Long.parseLong(token);
}
 /**
 *Searchs for a PNG data based on standard chars for the PNG lmage
 *@param data byte amay to search
 *@param idx sterting index lnto array to start searching
 *@retum true if PNG header data was found.false otherwise
 */
private boolean validatePNG(byte(idata,int idx)
{
  for (int ii=O;li<PNGID.length;ll++)
  {
    try
    {
      if(PNGlD[ti]i=data[idx+li])
         return false;
    }
    catch(indexOutOfBoundsException e)//read past end of byte array
    {
      return false;
    }
  }
  return true;
}
public byte()readlmage()throws EOFException
{
  if(tslmage())
  {
    read();
  }
  return blnaryData;
}
public boolean isimage()
{
  if(readPos+PNGID.length>=data.length||eof)
    return false;
  if(data[readPos]==PNGID[O]&& validatePNG(data,readPos))
  {
    //Systam.out.printin(******FOUND PNG 1MAGE#1 start=″+start+″end=″+dsta.length);
    return true;
  }
  blnaryData=null;
  retum false;
}
public byte()readBinary(lnt len)throws OutOfMemoryEmor
{
  iong fm=Runtime.getRuntime().freeMemory();
  byte bdata();
  if(fm>len)
  {
    bdata=new byte[len];
    System.anaycopy(data,readPos,bdata,O,len);
  }
  else
    throw new OutOfMemoryError(″Not enough free memory to handle requeat.″);
  readPos+=len+dellmitr.length;
  retum bdata;
}
public byte[]readBlnaryChar(int len)throws OutOfMemoryError
{
  long fm=Runtime.getRuntime().fraaMemory();
  if(fm>len)
  {
    Base64inputStream bdeta=new Base64lnputStream(new B64Data());//=new
byte[len];
    byte()bbytes=new bytelien];
    try{
    bdata.read(bbytes);
   }
   catch(Exception ex)
   {
    while(readPos<data.length && data[readPos]i=′i′)
    {
      readPos++;
    }
    return null;
    }
    /*
    for(inti=O;i<len;i++)
    {
        bata[i]=(byte)data[readPos++];
    }
    */
     //System.arraycopy(data,readPos,binsryDeta,O,len);
    readPos+=delimter.length;
    return bbytes;
   }
    else
       throw new OutOIMemoryEnorror(″Notenough free memory to hendle request.″);
}
public boolean read()throws EOFException//Read Next Token
{
  token=**
  if(eof)
    throw new EOFExceptionr(″Eof reached in tokenParser.″);
  if(islmage())
  {
    if(readPos==O)//assume all the data is an image
      binaryData=data;//no need to allocate another memory chunk for this
    else
    {
      binaryData=readBinary(data.length-readPos);
    }
    readPos=data.length+1;
    eof=true;
    return true;
  }
  //Find the starting position of the next delimiter
  int nextpog=indexOf(readPos);
  if(nextpos<O)//next dellmiled is end of data
  {
    nextpos=data.length;
    //eof=true;
    //throw newEOFExceprion(″Eof reached in tokenParser.″);
  }
  if(nextpos>readPos)
  {
    //token=new String(data,readPos,nextpos-readPos);
    StringBuffer cdata=new StringBuffer(nextpxtpos-readPos);
    char ch;
    int ec;
    for(intj=readPos;j<nextpos;j++)
    {
        ch=(char)data()];
        if(ch==1)//extended character indicatator
        {
           ch=(char)data[++j];//high order byte
           ec=ch*258;
           ch=(char)ec;//(int)ch*256:
           ch+=(char)data[++j];
        }
        cdata.append(ch);
    }
    token=cdata.boString();
  }
  readPos=nerxtpos+delimiter.length;
  if(readPos>=data.length)
  {
    eof=trne;
  }
  return true;
}
  /**
  *Works like String.indexOtbut makes assumptions that dollmeter is usually one byte
  *long,start is>=0,data length is grcater than O.Also uses bytes lnstead of char/Strings.
  *@param data byte array to search
  *@param start index into array to start search
  *@retum index into array if delimlter is found,-1 if it’s not found
  */
protected int indexOf(int start)
{
    white(start<data.length)
    {
      if(data[start]==delimlier[O])
      {
        //System.out printin(″retum ″+start):
        if(delimiter.length>1)//Rrst char matches
        {
           int ii=start+1;
           int jj=1;
           while(ii<data.length &&
               jj<dellmiter.length &&
               data[jj++]==deiimlter[jj++])//do rest of delim chara match?
           {
             //do nothing
           }
           if(jj==delimiter.length)//found match
           {
              //System.out.printin(″Found muiti delim ″+start);
              retum start;
           }
        }
        else
          return start;
      }
      start++;
    }
    //System.out.printin(″Found no more tokens″);
    return-1;//no match found
  }
//abstract public void rawRead();
public void SkdpToStat()throws EOFException
{
  readPos=O;
  eof=false;
  if(islmage())
    return;
  while(i eof)
  {
    read();
    if(token.indexOf(″start″)>=O)
    {
      return;
    }
  }
}
public static Vector parseString(String str.String dellmiter)
  {
    Vector v=new Vador();
    int atart=O,end;
    whlle((end=str.indexOf(dalimiter,start))i=-1)
    {
      v.addElement(new String(str.aubstring(start,end)));
      start=end+delimiter.length();
    }
    if(str.length()>start)
    {
      v.addElement(new String(str.substring(start)));
    }
    v.trimToSize();
    return v;
  }
}
附录B
packago com.handmark.express.common;
import java.io.*
import java.lang. System;
import javax.microedition.rms.*
import net.rim.devkce.apl.io.Base64OutputStream;
import net.rim.devtce.apl.system.*
//#fdef debug
import de.enough.polish.util.Debug;
//#endif
public ciess CecheFileTool extends TokenParser
{
  public statlc final String PREFERENCES_STORE=″preferences″;
  public statlc final String STOCK_STORE=″stock″;
  public static final String STOCK_PREF_STORE=″stockpref″;
  public static final String WEATHER_STORE=″weather″;
  public static final String WEATHER_PREF_STORE=″weatherpref″;
  public static final String ALERTS_STORE=″alerta″;
  public static final String MOVIES_PREF_STORE=″movlespref″;
  public static final String MOVIES_STORE=″movies″;
  public static final String INFO_STORE=″info″;
  public static final String INFO_PREF_STORE=″infopref″;
  public static final String MAP_PREF_STORE=″mappref″;
  public static final String NEWS_PREF_STORE=″newspref″;
  public static final String NEWS_STORE=″news″;
  public static final String SPORTS_PREF_STORE=#sportsprer#;public String flename;
  public static final String SPORTS_STORE=″sports″;
// public int writeTrigger;
// public boolean writing;
  private RecordStore rs;
  private RecordEnumeretion re;
  private StringBuffer writeStream;
// private boolean bResultStore;
// private int writeStreamSize=O;
  public static final String RMS_FULL=″Unable to save result data.Please reduca the
number of results being stored and update again to store these results.″;
  public int sizeAvallable;
  class B84Data extends OutputStream
  {
     public void vrite(int v )
     {
         writeStream,appsnd((char)v);
     }
  }
  public CacheFlleTool()
  {
    SetDelimite(″i″);
  }
  public vold init()
  {
    writeStream=new StringBuffer();
    eof=falae;
  }
  publlc void inlt(boolean bResultStore)
  {
    //this.bResultStore=bResultStore;
    //writeStream=new Vector(32,128);
    writeStream=new StringBuffer();
    //writeStreamSize =O;
    eof=false;
  }
  public boolean saveClean(String fn)throws RecordStoreFullException,
RecordStoreException
  {
    filename=fn;
    int{}ids=null;
    //ifwedon′t have enough size to save changss-don′t delete old data
    ra=RecordStore.openRecordStore(fiename,true);
    //save 2K buffer-it is possibie to save a recordstora that can′t beopened becausa of
space
    int totalAvailable=rs.getSizeAvaltable()+rs.getSize();
    rs.closeRecordStore();
    if(lotalAvaltable<writeStream.length()+2048)
      throw new RecordStoreFullException();
    boolean trydetrec=false;
    boolean tryreplace=false;
    try{
      RecordStore.deleteRecordStore(filename);
    }
    catch(Exceptione ex){
     //#ifdef debug
      Debug.debug(″cacheFileTool:saveCiean()-delete:″+ex.getMessage(),ex);
      //#endif
      trydeirec=true;
    }
    if(trydelrac)
    {
    try{
    rs=RecordStore.openRecordStore(filename,true);
    int nrec=rs.getNumRecords();
    intid;
    ids=new int[nrec];
    int i=O;
    do{
    rs=rs.enumerateRecords(null,null,true);
    if(re.hasNextElement())
    {
        id=re. nextRecordld();
        rs.deleteRecord(id);
        ids[i++]=id;
        //readStrearn=new String(bytes,O,bytes.length,″UTF-S″);
     }
     else
     {
      break;
     }
     }whae(true);
     ra.clossRecordStore();
    }
    catch(Exception ex)
    {
      //#ifdef debug
       Debug.debug(″cacheFileTool:saveClean()-try delete rec:″+ex.getMessage(),ex);
      //#endlf
      tryreplace=true;
    }
   }
   if(tryreplace)
   {
     try{
        if(ids i=nua)
        {
          saveAsReoord(ids[O]);
          closeWithoutSave();
          return true;
        }
       }
       catch(Exception ex)
       {
       //#ifdef debug
          Debug.debug(″cacheFileTool:saveClean()-try replace rec:″+ex.getMlessage(),
ex);
          //#endif
       }
    }
    /#catch(RecordStoreNotFoundException e)
    {
          //don′t care about this one
    }
    catch(RecrdStoreException e)
    {
          //don′t care sbout thls one
    }*/
    try{
       rs=RecordStore.openRecordStore(filaname,true);
    }
    /#catch(RecordStoreException e)
    {
          //don′t cars about this one
          lastError=e.getMessage();
          enor=true;
        return false;
    }*/
     catch(Exceptione)
    {
     //#ifdef debug.error
     Debug.debug(″cacheFileTool:create()-open:″+e.getMsage(),e);
     //#endif
     strLastError=e.getMessage();
     error=true;
     return talse;
    }
     //Write data lntoan lntemal byte array
     //writeBuffer=new ByteArrayOutputStream();
     close();
     return true;
  }
  public booiean open(String fn)
  {
    eof=false;
    filenarne=fn;
    try{
       rs=RecordStore.openRecordStore(filename,true);
       sizeAvallable=is.getSizeAvailable()+rs.getSize();
    }
    catch(RecordStoreFullException rsfe)
    {//if we can′t open it because we don′t have space we might as well deleta it
        try{
           //#ifetf debug.error
           Debug.debug(″CacheFlleTool:open-need to increase RMS buffer,unable to open
existing store.″);
           //#endif
           RecordStore.deteteRecordStore(filename);
           rs=RecordStore.openRecordStore(filename,true);
           sizeAvailable=rs.getSizeAvallable()+rs.getSize();
      }
      catch(Exception e)
      {
        //#ifdef debug.error
        Debug.debug(″CacheFlleTool:open-Unabte to open empty tecord store″,e);
        //#andif
        return false;
      }
    }
    catch(Exception e)
    {
      //#ifdef debug
         Debug.debug(″cacheFileTool:open()″+e.gatMesssge(),e};
       //#endif
           strLastEnor=e.gatMessage();
           error=true;
           return faise;
    }
  rawRead()://Read the first record
  return true;
}
//this code is assuming that there is only one record i the record atore
//and that this record is one big deilmlted UTF-8 String
public vold rawRead()
{
  try
  {
    re=rs.enumerateRecxords(nuli,nutl,faisa);
    if(re.hasNextElement())
    {
      data=re.nextRecord()://binary data
      //readStream=new String(bytes,O,bytes.length,″UTF″);
    }
    else
    {
      eof= true:
    }
  }
  catch(Exception e)
  {
   //#ifdaf debug.error
        Debug.debug(″cacheFileTool:rewRead():″+e.getMessage(),e);
   //#endif
   strLaatError=e.getMessage();
    error=true;
    eof=true;
    data=null;
  }
}
public vold close()throws RecordStoreFullException,RecoredStoreException
{
  save();
  closeWithoutSave();
}
publlc vold doseWithoutSave()
{
  if(rsi=nuil)
  {
    try
    {
      rs.closeRecordStore();
    }
    catch(Exception e)
    {
      //#ifdefdebug.error
         Debug.debug(″cacheFileTool:close″+e.getMessge());
      //#endif
    }
  }
}
public boolean wrtte(int v)
{
   wrtte(integer.toString(v));
   retum error;
}
publlc boolean write(byte bdataff)
{
  try{
    if(wrtteStream=null)//rw added
      init();
    if(bdata i=null)
    {
      /*
      for(inti=O;i<bdate.length;i++)
      {
        //writeStream.append((char)bdata[i]);
      }
      */
      Base64OutputStream b=new Base64OutputStream(newB64Daba());
      b.write(bdata);
    }
    writeStream.append(″i″);
  }
  catch(Exception e)
  {
   //#ifdef debug.error
   Debug.debug(″cacheFlleTool.write():″+e.getMessaga(),e);
   //#endif
   error=true;
   strlaatError=e.getMassage();
  }
  return error.
}
public boolean write(long v)
{
  write(Long.to String(v));
  return error.
}
public boolean write(boolean v)
{
  String str;
  if(v)
  {
    str=″Y″;
  }
  else
  {
    str=″N″
  }
  wnite(str);
  return error;
}
public boolean Write(String str)
{
  try{
     if(writeStream==null)//rwadded
        init();
     if(stri=null)
        writeStream.append(str);//append(null)=adds the string′null′
     writeStream.append(″i″);
  }
  catch(Excaption e)
  {
    //#ifdef debug.error
    Debug.debug(″cacheFlleTool.write():″+e.getMessage(),e);
    //#endif
    error=true;
    strLastError=e.getMessage();
  }
  return errot,
}
//fish the bytes written to the recod atore
private vold save()throws Record Stors FullException,RecordSloreException
{
    if(writeStream==null||writeStream.length()<=O)
      return;
    byte()bytes=null;
    try{
      bytes=writeStream.toString().getBytes(encoding);//out.toByteArray();
    }
    catch(UnsupporfedEncodingException e)
    {
     //#ifdefdetrug.error
    Debug.debug(″cacheFlleTool.save()-encoding:″+encoding+″\n″+e.getMessage(),e
);
    //#endif
    strLastError=e.getMessage();
    error=true;
  }
  try{
    if(bytesi=null)
    {
       rs.addRecord(bytes,O,bytes.length);
    }
  }
  catch(RecordStoreNotOpenExcsption e)
  {
     //#ifdef debug.error
     Debug.debug(″cacheFlieTool.save()-record store not open:″+e.getMessage());
     //#endif
     strLastEmor=e.getMessage();
     error=true;
     throw e;
    }
    catch(RecordStoreFullExcaption rsfe)
    {
       //#ifdef debug.errcr
       Debug.debug(″cacheFlleTool:save()-need to lncrease RMS buffer slze.Unable to
add record.″);
      //#endif
        rs.closeRecordStore();
        strLastError=rsfe.getMessage();
        error=true;
        throw rsfe;
    }
  }
  //flush the bytes written to the record store
  private void saveAsRecord(int id)throws RecordStoreFullException,RecordStoreException
  {
    if(writeStream==null||writeStream.length<=0)
      return;
    byte() bytes=null;
    try{
      bytes=writeStream.toString().getBytes(encoding)://out.toByteArray();
    }
    catch(UnsupportedEncodingExcaption e)
    {
     //#ifdef debug.error
     Debug.debug(″cacheFlleTool.save()-encoding:″+encoding+″\n″+e.getMessage(),e
);
    //#endif
    strLastError=e.getMessage();
     error=true;
    }
    try{
      if(bytes i=null)
    {
         rs.setRecord(id,bytes,O,bytes.bytes.length);
    }
  }
  catch(RecordStoreNotOpenException e)
  {
      //ifdef debug.error
      Debug.debug(″cacheFlleTool.save()-record store not open:″+a.getMessage());
      //#endif
      strLastError=e.getMessage();
      error=true;
      throw e;
    }
    catch(RecordStoreFullException rsfe)
    {
      //#ifdef debug.error
      Debug.debug(″cachFileTool:save()-need to lncraase RMS buffer size.Unable to
add record.″);
     //#endif
       rs.closeRecordStore();
       strLastError=rsfe.getMessage();
       error=true;
       throw rsfe;
    }
  }
    public void delete ResuitStora(String resultStoreName)
    {
      try
      {
        RecordStore.delateRecordStore(resultStoreName);
    }
    catcn(Exception e)
    {
         //#ifdef debug.error
         Debug.debug(″CacheFileTool:saveChannels-Delete Record Store:″+
resultStoreName+″″+e.getMessage());
         //#endif
    }
  }
  public int getAvallableCacheSpaoe(String fn)
  {
    int totalAvallable=O;
    try
    {
      rs=RecordStore.openRecordStore(fn,true);
      //save 2K buffer-lt is possible to save a recordstore that can′t be reopened bscause
of space
      totalAvailabie=rs.getSizeAvaliable()+rs.getSize();
      rs.closeRecordStore();
    }
    catch
    (Exception rsnfe)
    {}
    return totatAvailable;
  }
}

Claims (31)

1.一种在便携式设备上的软件组件之间交换数据的方法,包括:
利用所述便携式设备加载第一软件组件;
为所述第一软件组件从业务提供者检索数据,其中所检索的数据的至少一部分是与第二软件组件公共的;
由所述第一软件组件发起调用,以加载所述第二软件组件;
加载所述第二软件组件;以及
在所述第二软件组件和所述第一软件组件之间交换数据。
2.根据权利要求1所述的方法,其中所检索的数据中至少一部分不是与所述第二软件组件公共的。
3.根据权利要求1所述的方法,进一步包括:为所述第二软件组件从所述业务提供者检索补充数据。
4.根据权利要求1所述的方法,其中所述便携式设备包括无线设备。
5.根据权利要求1所述的方法,其中软件组件包括应用程序和驻留在应用程序中的频道/插件其中之一。
6.根据权利要求1所述的方法,进一步包括:显示使用为所述第一软件组件从所述业务提供者所检索的公共数据的软件组件列表。
7.根据权利要求6所述的方法,进一步包括:从所述列表中选择所述第二软件组件。
8.一种在便携式设备上为软件组件呈现数据的方法,包括:
识别所述软件组件所使用的第一数据类型和第二数据类型;
从业务提供者检索对应于所述第一数据类型的数据;
从所述便携式设备检索对应于所述第二数据类型的数据;以及
在所述便携式设备上显示返回内容结果,包括所述第一数据类型和所述第二数据类型。
9.根据权利要求8所述的方法,其中所述第一数据类型包括状态/更新传息。
10.根据权利要求9所述的方法,
其中所述第一数据类型包括过期状态/更新信息,并且
其中所述第二数据类型包括先前由所述便携式设备检索的当前状态/更新信息。
11.根据权利要求9所述的方法,其中所述第二数据类型包括应用程序文件。
12.根据权利要求8所述的方法,其中所述第二数据类型包括应用程序文件。
13.根据权利要求8所述的方法,其中识别所述软件组件所使用的第一数据类型和第二数据类型是由业务提供者执行的。
14.根据权利要求8所述的方法,其中识别所述软件组件所使用的第一数据类型和第二数据类型是由所述便携式设备执行的。
15.根据权利要求8所述的方法,其中识别所述第一数据类型和所述第二数据类型包括:
提供可用于所述软件组件的数据的列表;以及
选择所述可用于所述软件组件的数据的列表的子集,
其中所述第一数据类型包括所选中的数据并且不包括未选中的数据。
16.根据权利要求8所述的方法,进一步包括:将对应于所述第二数据类型的数据存储在所述便携式设备中。
17.根据权利要求8所述的方法,其中软件组件包括应用程序和驻留于应用程序中的频道/插件其中之一。
18.根据权利要求8所述的方法,其中所述便携式设备包括无线设备。
19.一种自动定制用于便携式设备上软件组件的数据检索的方法,包括:
为所述便携式设备提供标识符;
将所述标识符存储在所述便携式设备中;
访问所述便携式设备上的软件组件;
从业务提供者检索对应于所述标识符的数据;以及
在所述便携式设备上显示返回结果,包括对应于所述标识符的数据。
其中对应于其他标识符的数据被从来自业务提供者的初始数据检索中排除。
20.根据权利要求19所述的方法,其中所述标识符包括下述其中之一:
位置标识符;
地址;以及
电话号码。
21.一种自动填充便携式设备上软件组件的位置字段的方法,包括:
确定所述软件组件的位置精度要求;
通过全球定位系统(GPS)的应用软件编程接口(API)请求所确定的位置精度要求的位置信息;以及
用从GPS所接收的位置信息自动填充所述软件组件的位置字段。
22.根据权利要求21所述的方法,进一步包括从GPS接收位置信息,其中所接收的位置信息的精度不大于所确定的位置精度要求。
23.根据权利要求21所述的方法,其中为第一软件组件所确定的位置精度要求不同于为第二软件组件所确定的位置精度要求。
24.一种用于开发便携式设备的软件组件的软件组件开发人员工具包,包含机器可读程序代码,其中所述机器可读程序代码包含下述类中的至少一种:
Support Scrolling助手类,适于并被配置为支持垂直滚动并返回可视窗口的总尺寸;
Support RenderedUI类,适于并被配置为将屏幕的可视部分存储为位图;
Support Rendered Form类,适于并被配置为定义多个文件、管理所述多个文件的绘图、以及获取用户对所述多个文件的访问;
Wnd Update Channels类,适于并被配置为允许用户从更新中核对包含项、从更新中不核对排除项、以及操纵更新顺序;
令牌分析类,适于并被配置为分析来自文件和超文本传输协议(HTTP)数据传送的数据;以及
缓存文件工具类概述类,适于并被配置为封装通用读/写函数以在多个环境之间移植所得到的接口。
25.一种适于并被配置为通过无线数据链路与数据内容提供者通信的无线设备,包括:
利用所述无线设备上的软件组件访问数据的装置;
选择性地用来自所述数据内容提供者的数据更新所述软件组件所使用的数据的装置;以及
在所述无线设备上显示所接收数据的装置。
26.一种为便携式设备上的软件组件自动定制数据检索的方法,包括:
为所述便携式设备提供用户相关数据;
在所述便携式设备上存储所述用户相关数据;
在所述便携式设备上访问软件组件;
从业务提供者检索对应于所述用户相关数据的数据;以及
在所述便携式设备上显示包括所检索数据的返回结果,
其中所检索数据被从来自所述业务提供者的初始数据检索中排除,至少一部分可用于所述软件组件的数据基于所提供的用户相关数据。
27.根据权利要求26所述的方法,其中所提供的用户相关数据包括监控所述便携式设备的使用历史。
28.根据权利要求26所述的方法,其中用户相关数据包括下述之一:
所述便携式设备上由用户提供的用户首选项;
由所述便携式设备的先前使用所表示的用户首选项;
先前用所述数据业务提供者存储的用户首选项;以及
存储在所述便携式设备上其他软件组件中的用户信息。
29.根据权利要求26所述的方法,其中提供用户相关数据包括在用户接口上输入数据。
30.一种无线数据访问架构,包括:
数据业务提供者,适于并被配置为向客户端无线设备发送数据分组并且从数据内容提供者接收数据;
所述数据内容提供者,适于并被配置为向所述数据业务提供者提供数据以供所述客户端无线设备使用;以及
所述客户端无线设备,适于并被配置为从所述数据业务提供者请求对应于第一数据类型的数据,
其中所述数据业务提供者将来自所述数据内容提供者的数据划分成所述第一数据类型以及第二数据类型,以及
其中所述数据业务提供者组合所述数据分组,包括对应于所述第一数据类型的数据,并且不包括对应于所述第二数据类型的数据。
31.根据权利要求29所述的无线数据访问架构,其中所述无线设备进一步适于并被配置为从所述数据业务提供者接收所述数据分组、从所述无线设备上的源获取对应于所述第二数据类型的数据、以及生成利用对应于所述第一数据类型和所述第二数据类型的数据的显示。
CNA2005800117372A 2004-03-10 2005-03-10 数据访问架构 Pending CN101006425A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US55163604P 2004-03-10 2004-03-10
US60/551,636 2004-03-10

Publications (1)

Publication Number Publication Date
CN101006425A true CN101006425A (zh) 2007-07-25

Family

ID=34975760

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2005800117372A Pending CN101006425A (zh) 2004-03-10 2005-03-10 数据访问架构

Country Status (4)

Country Link
US (1) US7761871B2 (zh)
EP (1) EP1725932A4 (zh)
CN (1) CN101006425A (zh)
WO (1) WO2005088450A1 (zh)

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102577584A (zh) * 2009-10-12 2012-07-11 微软公司 将用户数据录入路由到应用程序
TWI463403B (zh) * 2011-05-05 2014-12-01 Univ Nat Taipei Technology 迭代式智慧型手機應用開發平台
US9015606B2 (en) 2010-12-23 2015-04-21 Microsoft Technology Licensing, Llc Presenting an application change through a tile
US9052820B2 (en) 2011-05-27 2015-06-09 Microsoft Technology Licensing, Llc Multi-application environment
US9104440B2 (en) 2011-05-27 2015-08-11 Microsoft Technology Licensing, Llc Multi-application environment
US9128605B2 (en) 2012-02-16 2015-09-08 Microsoft Technology Licensing, Llc Thumbnail-image selection of applications
US9158445B2 (en) 2011-05-27 2015-10-13 Microsoft Technology Licensing, Llc Managing an immersive interface in a multi-application immersive environment
US9223472B2 (en) 2011-12-22 2015-12-29 Microsoft Technology Licensing, Llc Closing applications
US9451822B2 (en) 2014-04-10 2016-09-27 Microsoft Technology Licensing, Llc Collapsible shell cover for computing device
CN106127440A (zh) * 2016-07-11 2016-11-16 石莉 国际物流的报关数据选择方法及系统
US9658766B2 (en) 2011-05-27 2017-05-23 Microsoft Technology Licensing, Llc Edge gesture
US9674335B2 (en) 2014-10-30 2017-06-06 Microsoft Technology Licensing, Llc Multi-configuration input device
US9696888B2 (en) 2010-12-20 2017-07-04 Microsoft Technology Licensing, Llc Application-launching interface for multiple modes
US10254955B2 (en) 2011-09-10 2019-04-09 Microsoft Technology Licensing, Llc Progressively indicating new content in an application-selectable user interface
CN110083458A (zh) * 2012-12-13 2019-08-02 微软技术许可有限责任公司 用于通过应用间通信来促进任务完成的系统和方法
US10459607B2 (en) 2014-04-04 2019-10-29 Microsoft Technology Licensing, Llc Expandable application representation
US10579250B2 (en) 2011-09-01 2020-03-03 Microsoft Technology Licensing, Llc Arranging tiles
US10969944B2 (en) 2010-12-23 2021-04-06 Microsoft Technology Licensing, Llc Application reporting in an application-selectable user interface
US11272017B2 (en) 2011-05-27 2022-03-08 Microsoft Technology Licensing, Llc Application notifications manifest
CN115544006A (zh) * 2022-09-23 2022-12-30 北京上里科技文化有限公司 一种通用数据库数据操作模型及其构建方法
US11823105B2 (en) 2016-11-06 2023-11-21 Microsoft Technology Licensing, Llc Efficiency enhancements in task management applications

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7739363B1 (en) * 2003-05-09 2010-06-15 Apple Inc. Configurable offline data store
US8463872B2 (en) * 2004-07-02 2013-06-11 Broadsoft Casabi, Llc Method and apparatus for a family center
US20070294336A1 (en) * 2004-07-02 2007-12-20 Greg Pounds Proxy-based communications architecture
CN101002458B (zh) 2004-07-02 2010-10-27 卡萨比有限公司 用于无线电话和其他电信服务的方法和装置
EP1839130A1 (en) * 2004-12-24 2007-10-03 Telecom Italia S.p.A. Method and system for upgrading the software of a telecommunication terminal, in particular of a video telephone, and relatted computer program product
WO2007008248A2 (en) * 2005-07-11 2007-01-18 Voicedemand, Inc. Voice control of a media player
US7783743B1 (en) * 2005-09-23 2010-08-24 Emc Corporation Methods and apparatus for processing electronic mail-related data
DE102006016994A1 (de) * 2006-04-11 2007-10-18 Giesecke & Devrient Gmbh Erfassen des Betriebsmittelverbrauchs
US7917440B2 (en) * 2006-07-07 2011-03-29 Microsoft Corporation Over-the-air delivery of metering certificates and data
JP4743083B2 (ja) * 2006-11-02 2011-08-10 ブラザー工業株式会社 印刷装置
US20090132573A1 (en) * 2007-11-16 2009-05-21 Iac Search & Media, Inc. User interface and method in a local search system with search results restricted by drawn figure elements
US20090132513A1 (en) * 2007-11-16 2009-05-21 Iac Search & Media, Inc. Correlation of data in a system and method for conducting a search
US20090132643A1 (en) * 2007-11-16 2009-05-21 Iac Search & Media, Inc. Persistent local search interface and method
US20090132514A1 (en) * 2007-11-16 2009-05-21 Iac Search & Media, Inc. method and system for building text descriptions in a search database
US20090132505A1 (en) * 2007-11-16 2009-05-21 Iac Search & Media, Inc. Transformation in a system and method for conducting a search
US20090132645A1 (en) * 2007-11-16 2009-05-21 Iac Search & Media, Inc. User interface and method in a local search system with multiple-field comparison
US20090132484A1 (en) * 2007-11-16 2009-05-21 Iac Search & Media, Inc. User interface and method in a local search system having vertical context
US8145703B2 (en) * 2007-11-16 2012-03-27 Iac Search & Media, Inc. User interface and method in a local search system with related search results
US8732155B2 (en) * 2007-11-16 2014-05-20 Iac Search & Media, Inc. Categorization in a system and method for conducting a search
US8954541B2 (en) * 2007-12-29 2015-02-10 Amx Llc Method, computer-readable medium, and system for discovery and registration of controlled devices associated with self-describing modules
US8117225B1 (en) 2008-01-18 2012-02-14 Boadin Technology, LLC Drill-down system, method, and computer program product for focusing a search
US8117242B1 (en) 2008-01-18 2012-02-14 Boadin Technology, LLC System, method, and computer program product for performing a search in conjunction with use of an online application
DE102008008452A1 (de) * 2008-02-07 2009-08-13 Art+Com Ag System zur Übertragung von Informationen für Personen im Bereich eines Flughafens, Verfahren zur Übertragung von Informationen und ein Personenendgerät
US8073847B2 (en) * 2008-06-27 2011-12-06 Microsoft Corporation Extended user profile
US8180771B2 (en) * 2008-07-18 2012-05-15 Iac Search & Media, Inc. Search activity eraser
US8265862B1 (en) 2008-08-22 2012-09-11 Boadin Technology, LLC System, method, and computer program product for communicating location-related information
US8078397B1 (en) 2008-08-22 2011-12-13 Boadin Technology, LLC System, method, and computer program product for social networking utilizing a vehicular assembly
US8131458B1 (en) 2008-08-22 2012-03-06 Boadin Technology, LLC System, method, and computer program product for instant messaging utilizing a vehicular assembly
US8190692B1 (en) 2008-08-22 2012-05-29 Boadin Technology, LLC Location-based messaging system, method, and computer program product
US8073590B1 (en) 2008-08-22 2011-12-06 Boadin Technology, LLC System, method, and computer program product for utilizing a communication channel of a mobile device by a vehicular assembly
US7865594B1 (en) 2008-09-29 2011-01-04 Amazon Technologies, Inc. Managing resources consolidation configurations
US8316124B1 (en) * 2008-09-29 2012-11-20 Amazon Technologies, Inc. Managing network data display
US8117306B1 (en) 2008-09-29 2012-02-14 Amazon Technologies, Inc. Optimizing content management
US8286176B1 (en) 2008-09-29 2012-10-09 Amazon Technologies, Inc. Optimizing resource configurations
US8122124B1 (en) 2008-09-29 2012-02-21 Amazon Technologies, Inc. Monitoring performance and operation of data exchanges
US7930393B1 (en) 2008-09-29 2011-04-19 Amazon Technologies, Inc. Monitoring domain allocation performance
US8051166B1 (en) 2008-09-29 2011-11-01 Amazon Technologies, Inc. Service provider optimization of content management
US8510136B2 (en) * 2008-09-30 2013-08-13 Verizon Patent And Licensing Inc. Event ticket purchasing
US7917618B1 (en) 2009-03-24 2011-03-29 Amazon Technologies, Inc. Monitoring web site content
US20100281475A1 (en) * 2009-05-04 2010-11-04 Mobile On Services, Inc. System and method for mobile smartphone application development and delivery
EP2270658A1 (en) * 2009-06-22 2011-01-05 Clayster Asia Ltd. Method and computer system for introducing client devices into a client-server network
US8707296B2 (en) 2010-04-27 2014-04-22 Apple Inc. Dynamic retrieval of installation packages when installing software
US10147145B2 (en) * 2011-11-25 2018-12-04 Microsoft Technology Licensing, Llc Integrating an application into operating system components of a mobile computing platform
US9158563B2 (en) * 2012-03-27 2015-10-13 Microsoft Technology Licensing, Llc Dynamic plugin(s) for cloud application(s)
US9311069B2 (en) * 2013-03-13 2016-04-12 Google Inc. Search in application launcher
USD741874S1 (en) * 2013-06-09 2015-10-27 Apple Inc. Display screen or portion thereof with animated graphical user interface
US10063992B2 (en) * 2014-01-23 2018-08-28 Brian M. Dugan Methods and apparatus for news delivery
KR20160143784A (ko) 2014-04-10 2016-12-14 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 컴퓨팅 디바이스용 슬라이더 커버
CN105814591A (zh) * 2014-10-22 2016-07-27 华为技术有限公司 一种验证信息的传输方法及终端
EP3015984A1 (en) * 2014-10-29 2016-05-04 Hewlett-Packard Development Company, L.P. Providing data from data sources
US9769248B1 (en) 2014-12-16 2017-09-19 Amazon Technologies, Inc. Performance-based content delivery
US10027739B1 (en) 2014-12-16 2018-07-17 Amazon Technologies, Inc. Performance-based content delivery
US10225365B1 (en) 2014-12-19 2019-03-05 Amazon Technologies, Inc. Machine learning based content delivery
US10311372B1 (en) 2014-12-19 2019-06-04 Amazon Technologies, Inc. Machine learning based content delivery
US10311371B1 (en) 2014-12-19 2019-06-04 Amazon Technologies, Inc. Machine learning based content delivery
US10225326B1 (en) 2015-03-23 2019-03-05 Amazon Technologies, Inc. Point of presence based data uploading
US20200042650A1 (en) * 2018-08-06 2020-02-06 Ca, Inc. Methods of rendering a mobile application page based on past usage information and related wireless devices
US11726995B2 (en) 2019-12-17 2023-08-15 Hewlett Packard Enterprise Development Lp System and method for value pack generation using generic SQL plugin for unified console
US20220294788A1 (en) * 2021-03-09 2022-09-15 Oracle International Corporation Customizing authentication and handling pre and post authentication in identity cloud service

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5557798A (en) * 1989-07-27 1996-09-17 Tibco, Inc. Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
US5694546A (en) * 1994-05-31 1997-12-02 Reisman; Richard R. System for automatic unattended electronic information transport between a server and a client by a vendor provided transport software with a manifest list
US6522875B1 (en) * 1998-11-17 2003-02-18 Eric Morgan Dowling Geographical web browser, methods, apparatus and systems
US6636885B1 (en) * 1999-03-26 2003-10-21 Sun Microsystems, Inc. System using interface class in client computer to resolve references and retrieve delayed class applet from server
US6446111B1 (en) * 1999-06-18 2002-09-03 Epicrealm Operating Inc. Method and apparatus for client-server communication using a limited capability client over a low-speed communications link
US6629284B1 (en) * 1999-10-28 2003-09-30 Koninklijke Philips Electronics N.V. System and method for supervised downloading of broadcast data
US6681391B1 (en) * 2000-06-21 2004-01-20 Microsoft Corporation Method and system for installing software on a computer system
US20020156779A1 (en) * 2001-09-28 2002-10-24 Elliott Margaret E. Internet search engine
US20030145315A1 (en) * 2002-01-23 2003-07-31 Tuomo Aro Exchange of data between components of distributed software having different versions of software
US6810245B1 (en) * 2002-08-28 2004-10-26 Motorola, Inc. Intelligent remote software loading method for wireless portable communication device
US7139372B2 (en) * 2003-03-07 2006-11-21 July Systems, Inc Authorized distribution of digital content over mobile networks
US20050129385A1 (en) * 2003-09-16 2005-06-16 Jmz Llc Intelligent portable memory device with display

Cited By (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102577584A (zh) * 2009-10-12 2012-07-11 微软公司 将用户数据录入路由到应用程序
US9696888B2 (en) 2010-12-20 2017-07-04 Microsoft Technology Licensing, Llc Application-launching interface for multiple modes
US9229918B2 (en) 2010-12-23 2016-01-05 Microsoft Technology Licensing, Llc Presenting an application change through a tile
US9015606B2 (en) 2010-12-23 2015-04-21 Microsoft Technology Licensing, Llc Presenting an application change through a tile
US10969944B2 (en) 2010-12-23 2021-04-06 Microsoft Technology Licensing, Llc Application reporting in an application-selectable user interface
US11126333B2 (en) 2010-12-23 2021-09-21 Microsoft Technology Licensing, Llc Application reporting in an application-selectable user interface
TWI463403B (zh) * 2011-05-05 2014-12-01 Univ Nat Taipei Technology 迭代式智慧型手機應用開發平台
US11272017B2 (en) 2011-05-27 2022-03-08 Microsoft Technology Licensing, Llc Application notifications manifest
US10303325B2 (en) 2011-05-27 2019-05-28 Microsoft Technology Licensing, Llc Multi-application environment
US9158445B2 (en) 2011-05-27 2015-10-13 Microsoft Technology Licensing, Llc Managing an immersive interface in a multi-application immersive environment
US11698721B2 (en) 2011-05-27 2023-07-11 Microsoft Technology Licensing, Llc Managing an immersive interface in a multi-application immersive environment
US9104307B2 (en) 2011-05-27 2015-08-11 Microsoft Technology Licensing, Llc Multi-application environment
US9535597B2 (en) 2011-05-27 2017-01-03 Microsoft Technology Licensing, Llc Managing an immersive interface in a multi-application immersive environment
US9658766B2 (en) 2011-05-27 2017-05-23 Microsoft Technology Licensing, Llc Edge gesture
US9104440B2 (en) 2011-05-27 2015-08-11 Microsoft Technology Licensing, Llc Multi-application environment
US9052820B2 (en) 2011-05-27 2015-06-09 Microsoft Technology Licensing, Llc Multi-application environment
US10579250B2 (en) 2011-09-01 2020-03-03 Microsoft Technology Licensing, Llc Arranging tiles
US10254955B2 (en) 2011-09-10 2019-04-09 Microsoft Technology Licensing, Llc Progressively indicating new content in an application-selectable user interface
US9223472B2 (en) 2011-12-22 2015-12-29 Microsoft Technology Licensing, Llc Closing applications
US10191633B2 (en) 2011-12-22 2019-01-29 Microsoft Technology Licensing, Llc Closing applications
US9128605B2 (en) 2012-02-16 2015-09-08 Microsoft Technology Licensing, Llc Thumbnail-image selection of applications
CN110083458A (zh) * 2012-12-13 2019-08-02 微软技术许可有限责任公司 用于通过应用间通信来促进任务完成的系统和方法
CN110083458B (zh) * 2012-12-13 2023-11-28 微软技术许可有限责任公司 用于通过应用间通信来促进任务完成的系统和方法
US10459607B2 (en) 2014-04-04 2019-10-29 Microsoft Technology Licensing, Llc Expandable application representation
US9451822B2 (en) 2014-04-10 2016-09-27 Microsoft Technology Licensing, Llc Collapsible shell cover for computing device
US9674335B2 (en) 2014-10-30 2017-06-06 Microsoft Technology Licensing, Llc Multi-configuration input device
CN106127440A (zh) * 2016-07-11 2016-11-16 石莉 国际物流的报关数据选择方法及系统
US11823105B2 (en) 2016-11-06 2023-11-21 Microsoft Technology Licensing, Llc Efficiency enhancements in task management applications
CN115544006A (zh) * 2022-09-23 2022-12-30 北京上里科技文化有限公司 一种通用数据库数据操作模型及其构建方法
CN115544006B (zh) * 2022-09-23 2023-07-04 北京上里科技文化有限公司 一种通用数据库数据操作模型构建方法

Also Published As

Publication number Publication date
US20070214454A1 (en) 2007-09-13
US7761871B2 (en) 2010-07-20
EP1725932A4 (en) 2009-09-23
EP1725932A1 (en) 2006-11-29
WO2005088450A1 (en) 2005-09-22

Similar Documents

Publication Publication Date Title
CN101006425A (zh) 数据访问架构
US8341185B2 (en) Method and apparatus for context-indexed network resources
EP1486889B1 (en) Mobile information services based on cached information at the terminal
CA2676030C (en) Location in search queries
US7941430B2 (en) Multi-mode location based e-directory service enabling method, system, and apparatus
US8108778B2 (en) System and method for context enhanced mapping within a user interface
US8649968B2 (en) System and method of wireless downloads of map and geographic based data to portable computing devices
US20060058952A1 (en) System and method of wireless downloads of map and geographic based data to portable computing devices
US20110257960A1 (en) Method and apparatus for context-indexed network resource sections
US12019696B2 (en) System for obtaining websites having a geolocation near a location of a user computing device
Anacleto PSiS mobile

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20070725