2022年brew简明教程 .pdf

上传人:Che****ry 文档编号:27188908 上传时间:2022-07-23 格式:PDF 页数:34 大小:421.12KB
返回 下载 相关 举报
2022年brew简明教程 .pdf_第1页
第1页 / 共34页
2022年brew简明教程 .pdf_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《2022年brew简明教程 .pdf》由会员分享,可在线阅读,更多相关《2022年brew简明教程 .pdf(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1 BREW SDK 一览BREW SDK 包含了一组工具以帮助软件开发人员快速、高效率地开发,发布用于手持设备的 BREW 应用程序。1.1 BREW SDK 组件BREW SDK 包含了下列几个组件:BREW AEE:BREW AEE 是一个可扩展、面向对象的开发和运行环境,它提供了一个可以用 C 或 C+ 开发 BREW 小应用 (Applet) 或共享模块 (Shared Module) 的高效平台。它采用一种消息驱动机制(类似与 Microsoft Windows, Macintosh 和 X Windows) 以提高可用性。模拟器:BREW 模拟器提供了一个图形界面用于装载和测试

2、BREW 应用程序, BREW SDK 套件中自带了几种模拟设备的配置文件,用户也可以自己创建新的设备模拟配置文件,以模拟不同的手持设备。设备配置器:设置配置器可以用来创建新的设备配置文件或修改已有的设备配置文件,可以帮助配置诸如按键及其功能,设备屏幕大小和分辨率以及内存大小等。资源编辑器:使用 BREW 的资源编辑器, 可以为应用程序创建资源文件,开发者可以在Windows 或手持设备上使用同样的资源文件。MIF 编辑器:BREW 的 MIF 编辑器用于生成 MIF(模块信息文件)文件, MIF文件包含了用于装载模块或应用相关的一些信息,如应用程序名称,图标等。BREW 动态连接库:BREW

3、 SDK 套件包中包含几个动态连接库用于提供 BREW 相关的一些Window 平台核心服务调用接口。BREW OEM 动态连接库:该动态库提供了下层用于在 Window 平台上模拟设备一些动态库。BREW 头文件:BREW SDK 头文件中定义了 BREW SDK 所提供了接口定义,用作开发BREW应用,每个 BREW 接口都有与之对应的头文件, 在开发应用程序时如果用作某个接口,必需在源代码中包含该头文件。VS Add-ins :BREW SDK 套件可与 Visual Studio 结合使用,在成功安装 BREW SDK 套件后,在 Visual Studio 开发环境中会自动创建一个

4、BREW 应用开发向导以简化 BREW 开发过程。BREW Utilities:包含在 BREW SDK 中,提供了一些实用函数以开发 BREW 应用。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 34 页 - - - - - - - - - 程序示例:BREW 安装包中包含了几个示例程序以用于开发人员学习参考。BREW 文档:提供了 BREW 套件中工具, SDK 帮助及教程。在线帮助:在 Visual Studio 开发环境中置好 BREW 在线帮助后,可以通过 F

5、1 来显示 BREW 在线帮助。1.2 BREW 组件如何交互下图显示 BREW 的主要组件( MIF 编辑器、资源编辑器、 C+ IDE、设备配置器和模拟器)以及它们之间是如何相互作用的。图中 Testapp 代表了一个由 BREW 开发的应用程序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 34 页 - - - - - - - - - 1.3 BREW SDK 目录结构BREW 开发包安装后包含下列几个子目录:目录名称内容名师资料总结 - - -精品资料欢迎下载

6、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 34 页 - - - - - - - - - Bin BREW 可执行程序及数据文件Bitmaps 用于示例程序的图片资源Devices BREW 安装包中的设备配置文件Docs BREW 文档Examples 示例程序Help 帮助文件Inc 头文件Src BREW 相关的基础源文件,可以与自行开发的代码一起编译,比如开发者必需在每个项目中包含 AEEAppGen.c 和 AEEModGen.c 作为项目中的一部分 , 除非开发自己创建特性化的上述两个文件1.3.

7、1 Bin Bin 中包含了可执行程序及数据文件,在 BinDataFiles 子目录中有声音数据和几种 BEEP 声音,详细信息可以参考 ISound 接口,Bin 目录中也包含了用于不同语言环境下的资源文件,如 Binen 为英语资源文件,在 Mono, 4Grey, 256Color 目录下分别包含了颜色深度为1、2、8 位时系统和应用程序资源。设置缺省的 BREW 环境,在 Bin 目录下有一个 EnvVarSt.exe 。运行它可以设置BREW 土环境变量 BREWDIR 为 BREW 的安装目录。1.3.2 Bitmaps 该目录下为示例程序用到一些图片文件,你也可以在该目录下添加

8、一些新的图片用于新开发的应用程序。1.3.3 Devices 安装包中的设备配置文件, 可以通过模拟器调入不同的设备文件,如下图所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 34 页 - - - - - - - - - 1.3.4 Examples Examples 目录下包含了几个示例应用程序代码, 资源, Bar 文件(用于资源编辑器将资源调入 dll 中。) 共享文件和 MIF 文件。示例应用 BREW SDK 安装包中带有几个 BREW 应用,显示如何调用

9、 BREW 接口和 API 。小应用和 MIF 文件缺省的保存小应用程序和 MIF 文件的目录为 BREW 安装目录 Examples 。这是所用应用程序存贮目录的根目录,所有的应用程序具有和其 MIF 文件一样名称的应用程序目录。例如,应用程序目录下包含 ExpenseTracker.dll 和ExpenseTracker.mif , 该子目录下也包含了资源文件和其它应用程序相关文件。注:缺省 MIF 文件存放与其应用程序目录同一目录下,但也可以通过模拟器菜单更改其缺省路径位置。共享文件目录包含了可以被所有BREW 应用共享的文件。所有针对 AEE_SHARED_DIR 的文件读写操作都是对

10、该目录进行访问。该目录还有一个名为 appinfo.txt 的文本文件。每当发生针对应用程序管理器的更改,比如新增一个应用, 将更新该文件。模拟器启动时, 读取该文件和指定的 MIF 文件存放目录,为应用程序管理器载入正确的配置信息。1.3.5 Resource 资源目录, Bin 下的一个子目录,包含了针对某种语言和颜色深度的系统资源,缺省情况下, BREW 采用英文环境,缺省目录为。注:系统资源存放在AEEControls.bar 文件中, AEEControls.bri 为资源的源文件。1.3.6 关于路径及文件名名师资料总结 - - -精品资料欢迎下载 - - - - - - - -

11、- - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 34 页 - - - - - - - - - 当运行在 PC 上的应用程序时, 可以输入最长为 256 的路径及文件名, 但在实际设备上时,这个长度可能会较小。大小写敏感在输入文件名时文件名大小名非常重要,在 PC 机大小写可以混用,便在设备上,必需使用小写字母。2 BREW 基础今天的移动通信用户期望从他们的移动设备上得到更多的功能特性,这些移动设备包括了从高端和移动 PDA 到具有巨大市场的追求价格低廉,方便使用的手机设备。2.1 BREW解决方案BREW 的目标是提供一个高效、低成本,可扩展

12、的应用程序运行环境,尤其将其重点放在开发可无缝移植到虚拟手持设备上,和一些需要足够内存, 处理机速度及硬件的高端手持设备不同, BREW 运行在目前已存在的手持设备。 有了 BREW 应用程序开发人员可以为这些低成本的手持设备扩展其功能。BREW 所提供一些优点: BREW 提供了对 RAM 和固定内存空间 , 所有的对象都根据需要载入或卸载。BREW 提供了一个熟悉的, 与 Microsoft Window 和 Macintosh 或 UNIX X Windows 类似的消息驱动模式。BREW 可以本地化为以适应不同的国家。所有的文件都采用宽字节 (双字节), 所有的字符都是 16-bit

13、长度,BREW 同样也提供了对文本的 OEM 特定的格式。程序开发人员无需了关心底层的平台数据结构和设备驱动,因为 BREW 提供了各种良好定义的类来实现应用程序与设备之间的交互。可以独立、并行开发模块,从而减少开发和集成时间。模块可以在对象代码级进行集成, 从而在于简化了在 BREW 平台上增加模块的过程。BREW 支持接收应用程序指定的短消息,比如股票、Email 摘要等。BREW 提供了一些核心类用于与设备之间的交互,包括以下类:oShell services oTime/timers (obtaining current date and time. starting and stop

14、ping timers and alarms) oNotifications oMemory management oFile management oDatabase management oNetwork and sockets oHTTP oDownload and billing oUser interface controls, including the following: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 34 页 - - - - - - -

15、 - - oDialogs oDate controls oMenu controls oText controls oTime controls oStatic text controls oDisplay oImages (displaying, transformation, animation) oGraphics oMultimedia services (media players and recorders for audio and video content) oSound (generating ringing, warning sounds, and playing au

16、dio files) oStandard library helper functions 2.2 BREW 环境BREW 的可扩展的面向对象的应用程序运行环境可用 C 和 C+ 开发应用程序或共享模块,同时 BREW 提供了手持设备内存的有效利用和保护。BREW 支持应用程序和共享模块,应用程序和共享模块作为独立的 DLL 运行时由模拟器载入,共享模块包含了功能库(如增强的Game API)可被多个应用程序调用。BREW 应用可在 Window 操作系统进行模拟开发。 BREW 提供一组功能强大的对象技术给开发人员:应用服务支持简单的事件驱动的 AEE。核心服务提供了文件访问、网络服务、内存

17、和屏幕访问。增强服务如增强的图像功能、多媒体播放器和录音机以及 GPS 和语音服务。集成服务,允许应用程序开发人员得到一些诸如浏览器功能。下面的图示表明了 BREW 如何提供了一个访问 OEM 和 ASIC 软件应用程序和共享模块支持。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 34 页 - - - - - - - - - 2.3 BREW 模块 / 接口结构BREW AEE 提供了一组功能明细的服务,包括了几种 AEE 接口如 IShell 和IDisplay.每个

18、接口包含了一些资源及对这些资源进行操作的方法,BREW 模块可以包含一个或多个应用或类。2.3.1 使用接口接口由一个 32 位的接口 ID(类 ID)来标识,公用的接口必需使用 BREW 接口注册表来保留。接口注册表本身并不对如何对接口ID 进行赋值有什么约束,它提供了 BREW 开发人员防止 ID 冲突的方法。所用的 BREW 接口都从 IBase 派生出来。在使用一个接口之间,必需首先调用 IShell 接口的成员函数IShell_CreateInstance() 来创建该接口的一个实例, 注意在没有应用使用该接口要释放该接口资源。3 BREW 编程概念本章讨论了 BREW 编程的一些基

19、本概念 , 包括 Applet 、 模块、BREW 的 Class ID、Shell 服务、浮点运算等。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 34 页 - - - - - - - - - 3.1 Applet 和模块总述BREW 中每个应用都是作为一个独立的 Window DLL 存在的,每个模块可以包括一个或多个小应用 (Applet), 并且必需有一个与之对应的 MIF 文件,MIF 文件是通过 MIF 编辑器生成的,它包含了关于这个模块的内容信息,比如:支

20、持的类、支持的 Applet 、 Applet 权限、以及 Applet 的一些详细信息 (图标、题头)。MIF 文件同时也包含了模块中类的唯一的 Class ID, 并指出模块中哪点类是可以输出供其它的模块使用。一个模块可以从 BREW 资源文件中读取数据,从而使用应用程序可以获取字符串、图像、对话框资源。 通过在资源文件存入与语言或设备相关的信息,使用得编写适应不同国家或设备的应用成为可能。资源文件可以通过 BREW 的资源编辑器来生成二进制资源文件和相应的资源头文件。开发 BREW 应用,可以被编辑成可以模拟器和目标设备上运行,用于编辑 BREW 应用所需的一些头文件和源代码随 BREW

21、 SDK 提供,一些用于生成 DLL 特定功能的文件也包含中开发包中, 允许开发人员生成应用程序和资源文件,在模块器和目标设备使用的资源文件及其二进制文件格式是相同的。下面列出了生成一个应用所需的部件:BREW SDK 提供的 AEE 头文件。BREW SDK 提供的用于帮助生成应用的源代码。Applet 代码和头文件。同 MIF 编辑器生成的 MIF 文件。由资源编辑器生成的 Applet 资源文件及其头文件(可选)。3.1.1 关于 MIF 文件在 Applet 可以被模拟器调入之前必需创建该模块的 MIF 文件, MIF 文件也必需包含中 Applet 的发布包中。 在设备或是模拟器启动

22、时, 应用程序管理器读取每个 MIF 文件,以取得包含中该 MIF 文件中应用程序列表, 应用程序管理在屏幕显示该列表(应用程序图标及标题)。3.1.2 BREW Class ID BREW 中每个 Applet 或类都有唯一的 Class ID 与这对应,在 BREW 中使用一个 32 位整数来标记公共类或 Applet, 可以从 BREW 开发者http:/ Class ID 。注意: BREW Class ID 只对于授权的开发者开放,如果没有得到授权时,可以使用一些临时 Class ID, 直到你取得相应的授权为止。如果手工为类或 Applet 赋 Class ID ,必需保证其唯一性

23、,如果一个类或Applet 的 ID 相同,则该类或是 Applet 不能运行。比如如下的目录结构:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 34 页 - - - - - - - - - sample/bar.mif sample/testapp.mif sample/testapp/testapp.dll 如果 bar.mif 和 testapp.mif 具有相同的 Class ID, 该应用不会被运行, 这是因为 BREW 按照其中目录中出现的顺序来取 MIF

24、文件,对于指定 Class ID, BREW 先调入 bar.mif 。 所以当试图运行该项应用时, BREW 在该目录中查找 bar 子目录但找不到。BREW 中含用两种类的 Class ID :接口 Class ID 和 Applet Class ID。接口 Class ID所有 BREW 公用接口具有一个可以唯一标识其类别的 Class ID ,这些Class ID 是 BREW 保留并不可以被其它的类或 Applet 使用,当一个Applet 通过调用 ISHELL_CreateInstance 来取得一个指向某个接口的指针时,它使用该接口的 Class Id 来标明所需的接口,可以参

25、考 BREW API 查看所有的接口 Class ID 。Applet Class ID所有在 BREW 平台上运行的 Applet 也必需有一个唯一的 Class ID,在Applet 被载入时该 Class ID 将传给 AEE Shell ,Shell 随后将使用该Class ID 来载入和管理该 Applet 。3.1.3 创建实例BREW 提供了一个功能强大的函数 ISHELL_CreateInstance 用于创建 Applet 或模块。调用该函数时, BREW 从所支持的类列表中查找指定 Class ID,该列表包含了 BREW 提供核心 API 以及在系统启动从MIF文件中所取

26、得的Applet 及类列表。通过 BREW 模块支持的 IMODULE_CreateInstance 函数来创建一个类实例, 然而在可以使用该函数前,模块必需被载入和初始化,BREW 平台采用一个按需载入的机制,当模块被载入到系统中,BREW 通过 IModule 来创建所需的类实例,直到模块的引用值 (reference count)为 0 时,该模块才从系统中载出,此时BREW将释放该模块的所占内存。通常情况下 ,BREW 调用 ISHELL_CreateInstance只会调用 AddRef和 Release, 而不会调用其它函数, 如果一个类被成功创建, 将返回一个指向该接口的指针,当

27、调用者不再使用该类时,必需调用该类的Release 函数。特点要注意的所用包含在模块中的对象在创建时要增加该模块的引用值,而在释放该类时,要减小对模块的引用值,从而允许BREW 按需要载入载出该模块。3.1.4 创建 Applet 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 34 页 - - - - - - - - - 在 BREW 开发模式下, Applet 就是支持 IApplet接口的类,允许 BREW 调用相同的接口函数来管理所有的Applet 。 IApp

28、let接口只支持 HandleEvent 函数以及标准的 AddRef 和 Release 函数。BREW 在两种情况会创建Applet: 响应 ISHELL_StartApplet函数,从而启动Applet, 在这种情况下,将创建 Applet 并立即发送 EVT_APP_START消息,消息 EVT_APP_START通知Applet 它已处于活动状态可以向屏幕上绘制。响应注册过的通知及告警,在这种情况下,将创建Applet 并向其发送通知或告警特定的消息。3.1.5 处理 Applet 消息ISHELL_SendEvent函数用于向 Applet 发送消息,消息可以是同步也可以异步,发送

29、到 Applet 的消息可以是键盘事件、对话框事件、控件事件等。下面是发送到一个 Applet 消息序列:EVT_APP_START . Other App Events (EVT_KEY, etc.) . EVT_APP_SUSPEND (optional) EVT_APP_RESUME (optional) . Other App Events (EVT_KEY, etc.) . EVT_APP_STOP 一般情况下,Applet 只需处理一些事件,可以包括 EVT_APP_START,EVT_APP_STOP, EVT_KEY 和 EVT_COMMAND. 3.1.6 暂停和恢复运行Ap

30、plet 按照 BREW 模式,正常情况下只能有一个Applet 处于运行和可见(控制显示器) ,然而,多个 Applet 可以以后台方式运行, 这并不意味着一个Applet 不有被初始化以响应通知、告警或其它消息。当 BREW 暂停一个 Applet , 它将向 Applet 发送 EVT_APP_SUSPEND消息。 如果 Applet处理该消息时返回TRUE, 表明该 Applet 已处理过该消息并且没有被调出内存。如果 Applet 不想处理 EVT_APP_SUSPEND消息,可以返回FALSE, 在这种情况下,BREW 将停止该 Applet, 将向 Applet 发送 EVT_A

31、PP_STOP消息, Applet 将被载出内存。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 34 页 - - - - - - - - - 如果在 AEEClsCreateInstance()函数中分配内存, 而在 EVT_APP_STOP中释放该内存是极其危险的。因止在EVT_APP_START分配的内存必需在EVT_APP_STOP中释放,而在 AEEClsCreateInstance () 分配的内存,必需在APPFreeData () 释放。在模拟器情况下,

32、可以先运行一个Applet ,然后通过点击模拟器菜单选择一个选项(比如 Tool-Settings),此时 BREW 立即向 Applet 发送一个EVT_APP_SUSPEND消息,当你在设置窗口点击” Cancel”键时,BREW 将向 Applet发送 EVT_APP_RESUME消息。3.2 BREW开发指南下面提供的 BREW 开发指南可以帮助开发人员避免一些常见的错误以及减少用于测试及高度的时间。包括了:从 Window平台到 ARM 环境移植中可能出现的问题。可能在目标设备出现的问题,但却无法在模拟器中检测及出现。一般的通用的好的编码方法。通过阅读下面的指南可以帮助你减少从Win

33、dow到 ARM 环境的移植时间,并最大可能使你的应用在目标设备上成功运行: 开发指南说明进行NULL指针检测有两种情况,如下:1) 在创建 BREW 接口实例时必需检测NULL指针,如果指针不对,则不能使用该接口。2) 高通公司推荐开发人员检测所有的指针,包括传给或是从BREW 方法或是分配内存时返回的指针,以保证该指针的有效性,必需通过异常处理机制来处理非法指针。避免堆栈溢出不要在堆栈中使用大数组,不要在函数中定义大的数组或变量作为局部变量,这是因为在BREW 环境下提供给堆栈使用的内存是有限的,如果需要使用充足的内存(比如超过256 字节),使用动态内存分配机制来分配内存( MALLOC

34、 或使用 IHeap 接口)。如果是在一个递归过程中分配空间,动态分配内存。不要在循环中占用过多时间如果在循环中占用过多CPU时间可能引用设备复位,所以不要在一个事件处理中占用过多时间,这会阻止其它事件的发送而最终引起设备复位。当接收到某个事件时,应用只需做必需的事件处理后立限返回,从而可以保证其它事件的发送。开发设备无关的应用为保证所开发的应用可以在不同的设备上运行,而不需关心设备的内存大小、键盘、屏幕大小、颜色深度,使用ISHELL_GetDeviceInfo()来取得关于设备的信息,使用这些信息作为键盘、屏幕大小、颜色深度的参数,而不要在代码中写死。使用CONVERTBMP例程在不同设备

35、上处理图像。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 34 页 - - - - - - - - - 使用资源文件使用资源文件来存放与语言相关的字符串、对话框及图像数据。这允许将应用从一种语言切换到另一种语言。而不要直接写入代码中。释放内存由于设备上所能使用的内存是有限的,必需释放不再使用的内存空间,有两种情形:1) 必需释放所有创建的对象实例。2) 必需在应用终止时释放所有动态分配的内存。高通推荐立限释放不再使用的内存。不要使用全局及静态变量BREW 框架不支持全

36、局及静态变量,这是因为动态下载下来的应用不能处理这种类型的变量。此外,全局及静态变量在编译时将导致链接错误。在 Applet 结构中存取持久性数据。不要在定义一个结构时对其初始化从 ARM 编译器角度来看,定义并初始化一个结构将被视为静态变量。不要在条件语句中对变量赋值避免 ARM 编译器错误不要使用本地浮点调用原因同“不要使用全局变量”,这将引起类型转换,使用BREW 提供的浮点操作函数。使用BREW 提供的标准函数库以保证编译后的代码最小, 使用 BREW 提供的标准 C函数子集而不要直接调用函数。避免类型转换错误因为 ARM 编辑器比其它的编辑处理隐含类型转换时更为严格,请明确指明类型转

37、换,从而可以避免从Window到 ARM 环境下的编译错误。检测函数返回值当调用 BREW API 时,如果有返回值,处理成功和失败两种情况。处理错误码因为某些 API 返回 void, 如果适合的话,调用BREW 提供的GetLastError()来区别错误代码。使用小写的文件及数据库名称因为高通提供的 EFL中文件名是区别大小写的,使用小写的文件及数据名称。由于已知的原因,不要在文件名中使用两个. 不要在数据名中使用 . 。尽可能减小代码为尽可能减小代码,在将应用载入到目标设备前关闭调试信息选项。设置编译告警等级在 Window平台上编译时,将告警等级设为最高级,级,这将帮助你更进一步检测

38、代码。这是因为ARM 编译器比 Window编译器更为严格。组合多个读写操作为从整体提高应用程序性能,尽可能组合多个读写操作。将数据读入到内存中并根据需要来存取。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 34 页 - - - - - - - - - 3.3 创建新的应用当你熟悉了 BREW 开发环境,并看过了示例程序之后, 就可以编写新的 BREW 应用了。 最简单和最快的方式是使用BREW 应用开发向导,该向导将帮助创建开发BREW应用所需的各个部件。3.3.1

39、 语言相关的系统资源BREW 开发环境使用一组用于BREW 运行的系统资源, 这些系统资源是和设备支持的语言相关的并可以在资源文件 AEEControls.bar 中取得,该系统资源定义所有 BREW 接口所需要的资源。在设备环境中, 所有语言相关的资源放置在该语言特定的目录中,目录名称可以从 ISO639中引出来的。3.3.2 浮点操作BREW 平台不支持浮点操作,如果在BREW SDK 中开发并测试带浮点操作的应用时是可以通过的, 这是因为底层的平台是Window操作系统,然后设备 BREW 平台是不支持浮点操作也就不能使用浮点操作,如果必需使用则必需调用BREW 提供的浮点操作实用函数。

40、3.4 访问 Shell服务BREW 模块和 Applet 能过根 IShell接口来取得所有外部接口访问,每个接口具有一个唯一标识其身份的接口ID, 通过调用 ISHELL_CreateInstance () 来取得指定接口的指针。3.4.1 IShell接口IShell 接口提供了可用于Applet 访问设备操作系统功能一组服务接口。主要包括:取得 Shell 或设备支持的类。以得设备相关信息。激活或暂停一个 Applet 。管理定时器。取得系统时间和时间转换。管理对话框以取得用户输入。调入 Applet 使用的资源。发送事件到 Applet 或不同的接口。显示信息或提示框。发送告警。名师

41、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 34 页 - - - - - - - - - 注册和查询某个协议和浏览器。为某个接口注册特定的消息。3.4.2 IBase接口IBase 接口定义所有 AEE类的基本结构 , 所有 AEE类都是从 IBase 接口派生出来的。因为所有的 AEE对象都是可以动态生成的, 所有必需采用某种机制来分配及释放对象, IBase 接口提供了两个基本函数:AddRef 和 Release ,允许:动态分配接口释放接口所有的 BREW 类都

42、必需实现 IBase 接口函数。3.4.3 IModule和 IApplet接口IModule 和 IApplet接口和其它的一些接口不同,它们实现了应用程序应该所供提的服务,而不是由应用程序来调用的接口服务,它们为IShell接口提供了一种机制用于载入,管理,以及将消息发送给应用程序。BREW SDK 提供了缺省的IMoudle 和 IApplet实现。3.4.3.1 IModule接口BREW 模型一个基本机制是通过IShell来链接或载入模块, 这些模块向外提供了一个入口点用于取得IModule 接口,IModule 接口提供了两个函数。第一个和最关键的一个是允许BREW 从 IModu

43、le 查找指定的接口。 第二个则是允许 BREW 释放模块不再使用的资源。BREW 同时支持静态和动态模块。静态模块由生产商集成到设备中,因此只有设备制造商可以生成静态模块,动态模块可以动态下载到设备中,BREW SDK 只支持动态模块。静态和动态模块都向外输入单一的入口点,这是在模块中被调用或执行的第一个函数,对于静态链接的模块来说,这个入口点用于取得所支持的类和Applet, 入口点函数同时也返回模块主调函数的指针。BREW 调用这个主调函数来要求模块创建由该模块支持的类对象。 入口点函数必需具有唯一的名称,设备才能够管理这个入口函数并将其加入到静态模块列表中。动态模块只提供了主调函数,

44、这是通过将它放在可模块重分配代码段第一个对象的第一个函数来实现的。BREW 可以根据需要来调入这些模块。3.4.3.2 IApplet接口IApplet接口实现由 Applet 提供的服务, 主要是提供了一个机制使得IShell能够将消息发送到 Applet 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 34 页 - - - - - - - - - 3.5 消息处理机制BREW 应用是基本消息驱动的, 当 Applet 载入后,它能通过消息来获取用户输入,这是通过

45、Applet 的 HandleEvent 函数来完成的。3.5.1 发送给 Applet 的消息因为 BREW 是一个消息驱动的环境。 它要求消息能够及时被处理。 这意味着 Applet必需快速处理消息然后返回。在BREW 中,在消息处理中一定时间的延迟可能导致 Applet 的退出以保护设备的正常运行。当 BREW 将消息发送给 Applet 后, Applet 通过在事件处理函数中返回TRUE( 表示处理) ,FALSE (表示不处理)。当Applet 必需将该事件发送给其它的事件处理函数时(比如控件),可以直接返回该事件处理函数。Apple 接收三个与事件处理相关的参数,分别作为事件处理

46、函数HandleEvent 的第二、第三、第四个参数。下面是一个事件处理函数的定义:boolean HandleEvent?(IApplet * pIApp, AEEEvent eCode, uint16 wParam,uint32 dwParam) 第二个参数为 AEEEvent事件类型,指明了Applet 收到主事件类型。比如:EVT_APP_START, EVT_APP_STOP以及告警事件,可以参考BREW API 查看全部的事件类型。第三和第四分别为16 位和 32 位与事件相关的数据, 这些值是与具体的事件相关的。3.5.2 关于事件处理的几点提示在开发一个 Applet 时, 只

47、考虑和处理 Applet 需要处理的那些事件, 通常情况下,你可以忽略大多数的事件。比如,开发一个游戏,只需要上、下、左、右、选择键作为输入,而对应的键盘处理再接收到数字键时可以返回FALSE以使它们获得缺省的 BREW 事件处理。某些事件只有在 Applet 指明需要接收这些通知时才会发送到Applet 。而关键事件在任何情况是不能被Applet 忽略的,如 EVT_APP_START, EVT_APP_STOP。注意在某些特定状态下收到这些关键事件的处理方法,Applet 必需能够保存数据及上下文。键盘事件发送给 Applet 的事件是 EVT_KEY ,16位参数指明了键值,键值是以un

48、icode 的方式发送的。参考BREW API 查看全部的键值及符号。例如,按下数字键2 时,16位短参数包含了与字符2 对应的 unicode 值,这使得在 Applet 中可以处理一个击键事件,使用设备配置器,可以修改设备发送给Applet 的键值,设备 OEM 制造商决定了目标设备的键值定义。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 34 页 - - - - - - - - - 当一个按下或释放时, IShell将向处于活动状态的Applet 发送异步事件,

49、下面列出了一个 Applet 可以接收到的击键事件及其描述:键盘事件描述EVT_KEY_PRESS 当按下键时 Applet 接收到此事件,参数为:1) wParam: 主键值2) dwParam: 修饰键标识EVT_KEY_RELEASE 当键被释放时 Applet 接收到此事件,参数为:1) wParam: 主键值2) dwParam: 修饰键标识EVT_KEY 在按下键或键被释放时发送,或者两种情况都发送,这取决设备制造商的选择, Applet 应该在这个事件中处理键盘事件。因为不同的设备具体不同的键盘设置,在开发时应该在这些规范下编程。参数为:1) wParam: 主键值2) dwPa

50、ram: 修饰键标识3.5.3 BREW中处理 Tab事件在对话框中通过方向键来移动光标的方向取决于哪种控件具有焦点以及用户按了哪个方向(上、下、左、右)键。Tab 方向,后面称为前移、后移Tab事件,取决于如何在代码和资源文件中如何设计。一种好的设计是将控件按其ID 值大小顺序排列(从上到下, 从左到右) 。以这种方式对控件进行布局, 当收到前移、后移 Tab 事件,光标将在控件以一种合乎逻辑的方式移动。在进行手工处理Tab事件最好也选择这种方式。下面表格中的 Menu控件发送 EVT_CTL_TAB 事件:Menu控件发送 Tab事件Soft Key 1) Up = backward 2)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com