1 / 108

MIDP 应用程序

MIDP 应用程序. 1 MIDP 复习. MIDP 概述. 移动信息设备配置文件 (Mobile Information Device Profile , MIDP) 是一个用于手机 /PDA 开发的简表( Profile )。 在 Java ME 平台下, MIDP 定义了一个标准的 Java API 集合 ,该集合以 CLDC 为基础,为第三方的面向移动信息设备(如移动电话、双向寻呼机和无线个人电脑记事本)的应用的开发提供了一个开放的标准环境。

Download Presentation

MIDP 应用程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIDP应用程序

  2. 1 MIDP复习 MIDP概述 • 移动信息设备配置文件(Mobile Information Device Profile,MIDP) 是一个用于手机/PDA开发的简表(Profile)。 • 在Java ME 平台下,MIDP定义了一个标准的 Java API 集合,该集合以CLDC为基础,为第三方的面向移动信息设备(如移动电话、双向寻呼机和无线个人电脑记事本)的应用的开发提供了一个开放的标准环境。 • 目前,与MIDP相关的有两个简表:在JSR-37中定义了 MIDP 1.0 标准、在JSR-118 中定义了 MIDP 2.0 标准。

  3. MIDP1.0 • 功能: • 显示工具箱; • 提供用户输入方法; • 实现持久性数据存储(使用RMS); • 基于 HTTP 1.1 的网络(使用 CLDC的 通用连接框架)。 • 对于设备的最低要求为: • 显示:屏幕大小为96X54,显示深度为1位,长宽比近似为1:1; • 输入:一个或多个用户输入装置,包括单手键盘、双手键盘、触摸屏等; • 内存:128KB非易失性内存供MIDP组件使用,8KB非易失性内存供应用程序创建的持久存储数据使用,32KB易失性内存供Java运行时使用; • 网络:双向、无线、可能间歇的、带宽受限的网络。

  4. MIDP2.0 • 功能: • 支持操作图像的像素。 • 提供了增强型的图形用户界面类 CustomItem,提高了高级界面类的表现力。 • 增加的Media 音频子系统填补了 MIDP 1.0 不支持声音播放的空白。 • 使用Push 注册机制和安全模型增强了对 MIDlet 的控制。 • 提供游戏开发包提高了游戏开发的效率。 • 增强了联网能力,可以支持 TCP/IP 甚至是 UDP 层的通信。 • 对于设备的最低要求为: • 显示:屏幕大小为96X54,显示深度为1位,长宽比近似为1:1; • 输入:一个或多个用户输入装置,包括单手键盘、双手键盘、触摸屏等; • 内存:256KB非易失性内存供MIDP组件使用,8KB非易失性内存供应用程序创建的持久存储数据使用,128KB易失性内存供Java运行时使用; • 网络:双向、无线、可能间歇的、带宽受限的网络; • 声音:具有播放各种音调的能力,不管是通过硬还是软件算法获得。

  5. MIDP2.0新特性

  6. MIDP2.1 2006年5月正式发布的MIDP 2.1规范,是对MIDP2.0规范的补充,对MIDP2.0规范做了少量的补充,MIDP 2.1规范对设备的要求和MIDP2.0规范对设备的要求一致。 新特性: (1)支持Canvas的重复事件和图像的双缓冲。 (2)在manifest.mf文件和JAD文件中必须包含MIDlet-Permissions,以增强MIDlet程序的安全性。 (3)系统必须提供对ISO/IEC JPEG和JFIF格式文件的支持,并且支持载入深度为1、2、4、8、16和32位的PNG格式文件。 …………

  7. MIDP软件要求 • 一个能够管理底层硬件(中断、异常等)的最小内核。 • 一个非易失性内存中进行读写的机制,以便满足记录管理系统API的持久存储的要求; • 对设备的无线网络的访问能力,以便支持网络API; • 计时机制,用于给被持久存储的记录加上时间戳,以及为Timer API提供基础; • 写入一个位映射图像显示的最小能力; • 捕获用户从一种或多种先前提到的输入设备中的输入的机制; • 管理设备的应用程序生命周期的机制。

  8. 2 MIDlet概述 MIDlet简介 • MIDlet是一个可以执行的应用程序基本单位。除了继承自javax.microedition. midlet.MIDlet外,还包括让此类可以顺利执行的所有其它类和资源文件(只要是非class文件都称做资源文件)所构成的集合。 • 所以Java ME的手机程序也可以叫做MIDlet程序。 Java ME程序执行的入口必须是MIDlet的子类。

  9. MIDlet套件 • MIDlet套件(MIDlet Suite)是由许多MIDlet所构成的集合,一般又叫做MIDlet应用程序套件。 • MIDlet Suite和MIDlet的关系,就像Office与Word、Excel、PowerPoint、Access的关系。 • MIDlet Suite包含的文件: • 用于实现程序功能的一个或多个MIDlet; • 用于运行应用程序的JAR文件; • 用于描述JAR文件的清单文件MANIFEST.MF; • 用于描述应用程序的JAD文件 。

  10. JAR文件 JAR文件中主要包括下面各种元素: (1)实现MIDlet的类文件; (2)MIDlet中用到的任何资源文件(包括图像、声音文件等); (3)关于JAR内容的一份JAR MANIFEST描述。

  11. MAINFEST.MF示例

  12. JAD文件 • Java 应用程序描述符(Java Application Descriptor, JAD) 文件包含 MIDlet 套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。 • 在下载应用程序到设备之前,将先下载和读取描述符,然后再下载和读取包含 MIDP 应用程序的 JAR 文件。 • Java 应用程序描述符文件的扩展名为 .jad。

  13. MIDlet配置文件 • test1.jad源代码 MIDlet-1: MIDlet1,,MIDlet1 MIDlet-Jar-Size: 2921 MIDlet-Jar-URL: test1.jar MIDlet-Name: test1 Midlet Suite MIDlet-Vendor: Midlet Suite Vendor MIDlet-Version: 1.0.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.1

  14. MIDlet配置文件 • MIDlet-Name:MIDlet Suite的名称; • MIDlet-Version: MIDlet Suite 的版本号,格式为主版本.次版本.微版本,例如0.0.0。版本号主要用于安装或升级; • MIDlet-Vendor:MIDlet Suite的提供商; • MIDlet-Jar-URL:下载该MIDlet Suite 的URL 地址。虽然这里可以使用绝对位置或相对位置,但还是建议用绝对位置; • MIDlet-Jar-Size:JAR 文件的大小,计算单位为字节。

  15. JAD文件与JAR文件的关系 • MIDP规范规定,如果JAD描述文件及JAR manifest中三个必备属性有任何不同的话,KVM是不会安装该MIDlet Suite的。 • 在调用MIDlet.getAppProperty的时候:对于不可信任的MIDlet  Suite,JAD描述文件的属性会覆盖JAR manifest中的属性。对于可信任的MIDlet Suite,两者必须相同。

  16. MIDlet开发好之后,如果需要放在手机上面运行,就必须进行打包。打包方法为:右击项目节点,找到“J2ME” 菜单,可以选择“Create Package”来创建普通包,也可以选择“Create Obfuscated Package”来创建加密的包。 • 创建完毕,生成了一个包,如:test1.jar,对应的配置文件:test1.jad。 • 理论上讲,将deployed下面的两个文件拷贝到目标系统中就可以运行(手机)。

  17. 3.详解MIDlet结构 • javax.microedition.midlet包中,只包含一个类:MIDlet。 • MIDlet(Mobile Information Devices let)是手机上运行的JavaME应用程序,即移动信息设备小程序。理论上讲,手机应用程序都是MIDlet,所以在编写的过程中,为了让MIDlet有自己的功能,编写的程序应该继承javax.microedition.midlet.MIDlet。

  18. MIDlet基本API • MIDlet类是一个抽象类,抽象类无法直接实例化,但可以继承它,并且重写里面的抽象函数。 • 在这个类里面有一些成员函数,其中有六个比较重要,分别是: • 三个抽象函数,必须被重写: • protected abstract void startApp() • protected abstract void pauseApp() • protected abstract void destroyApp(boolean unconditional) • 三个普通函数: • public final void notifyPaused() • public final void notifyDestroyed() • public final void resumeRequest()

  19. MIDlet基本API • 这些函数体现了MIDlet的生命周期: • 当MIDlet运行时,startApp函数会自动调用,应用程序进入运行(Active)状态,此时程序正在运行中; • 在MIDlet运行时,可以通过一些手段让MIDlet暂停,此时,pauseApp函数自动调用,让程序进入暂停(Paused)状态; • 当MIDlet消亡时,自动调用destroyApp函数。 • 以上三个函数都是自动调用的。接下来的几个函数可以人为调用: • 人为调用notifyPaused函数,MIDlet立刻进入暂停(Paused)状态,MIDlet持有的所有资源暂时被释放,但它随时可能被运行; • 人为调用notifyDestroyed函数,MIDlet立刻进入销毁(Destroyed)状态,MIDlet被永久地关闭并且释放占用的所有资源,等待着废物清理程序的处理; • 人为调用resumeRequest函数,MIDlet立刻进入运行(Active)状态,并调用startApp函数。

  20. MIDlet的生命周期 • MIDlet的生命周期

  21. 4.界面基本知识 • 界面分为高级界面和低级界面: • 高级界面:界面上的效果都是由控件组成的; • 低级界面:界面效果都是通过手工编程,在画布上画出来的。 • 高级界面中的控件有两种:能够充满整个界面的控件和不能充满整个界面的控件;其中,能够充满整个界面的控件都是都是javax.microedition.lcdui.Displayable的子类,不能充满整个界面的控件都是javax.microedition.lcdui.Item的子类。

  22. 打开文档,找到javax.microedition.lcdui包,这个包里面包含了制作界面的最基本的API。打开文档,找到javax.microedition.lcdui包,这个包里面包含了制作界面的最基本的API。 • Displayable的子类有两个:javax.microedition.lcdui.Canvas和javax.microedition.lcdui.Screen,其中前者用于低级界面开发中的画布,后者是对高级界面的支持。

  23. Screen的子类有以下几个: • javax.microedition.lcdui.Alert:用于高级界面开发中的提示框; • javax.microedition.lcdui.Form:用于高级界面开发中的表单; • javax.microedition.lcdui.List:用于高级界面开发中的列表框; • javax.microedition.lcdui.TextBox:用于高级界面开发中的文本框。 • 可以任选一个类来充当界面控件。高级界面中最常见的是javax.microedition.lcdui.Form。

  24. 在了解Form之前,有几个重要规定需要理解一下: • MIDlet只是提供一个运行平台,上面的界面需要自己加上去来生成,如可以将Form加到MIDlet上。 • 用Display类可以将Form加到MIDlet上。 • 软键上方的菜单,是javax.microedition.lcdui.Command对象。Command不是Displayable的子类,不能充满整个界面。不过,Command虽然不能充满整个界面,但是可以依赖于Displayable,添加到Displayable上,因为Form是Displayable的子类,因此可以添加到Form上。

  25. javax.microedition.lcdui.Displayable中有如下方法可以进行命令按钮的维护: • Displayable有这些功能,当然它的子类Form也有这些功能。因此,可以在Form上添加命令按钮对象。 1:添加命令按钮: public void addCommand(Command cmd) 2:移除命令按钮: public void removeCommand(Command cmd)

  26. Command构造函数一共两个: • 其中,有三个参数: • label:字符串,表示按钮上的标题; • commandType:整型,表示按钮类型; • priority:按钮出现的优先级,为整数,数字越小,优先级越高,越出现在菜单中靠前的位置

  27. 添加命令按钮 • 按钮类型一共有八种,定义为javax.microedition.lcdui.Command中的静态变量,实际上是整型,将按钮分为八种,其目的是为了让程序员在不同按钮使用场合可以灵活设定,增加程序可读性。八种按钮及其使用场合如表所示:

  28. 添加命令按钮 • 应该注意,按钮类型只是提供了一个分类而已,不代表点击按钮会有相应的事件发生。如,点击了一个类型为Command.HELP的按钮,不代表能够出现在线帮助,如果需要出现在线帮助,其事件代码必须手工写。实际应用中,最常见的是Command.SCREEN(普通按钮)、Command.BACK(返回按钮)等,因为这些按钮在大量的场合中可能出现。

  29. 按钮排布规律 • 对于同一种按钮,如果优先级相同,则按照代码先后顺序添加到菜单中。关于其他情况下的按钮排布,有如下规律: • 1:不同种类的按钮,在WTK优先级排序依次是:Command.ITEM、Command.SCREEN、Command.OK、Command.HELP、Command.BACK、Command.EXIT、Command.CANCEL、Command.STOP。优先级高的按钮优先显示在菜单中靠前的位置。 • 2:Command.BACK、Command.CANCEL、 Command.EXIT、Command.STOP倾向于抢占左方。优先顺序: Command.BACK、 Command.EXIT、Command.CANCEL、Command. STOP。 • 3:同一种类的按钮,在构造函数内可以用参数3来确定优先级,数字越小越优先,越优先的显示在菜单中靠前的位置。 • 4:只是在WTK内满足这个规律,其他模拟器可能不相同,具体可以查询文档。

  30. 按钮事件 • Command添加到Form上之后,还不能实现任何功能,只有具有一定事件的命令按钮才有实际作用。 • 在JavaME中的事件,是利用监听机制进行实现的。

  31. 按钮事件 • 事件具体编写步骤如下: • 1:编写事件处理类,实现javax.microedition.lcdui.CommandListener; • 实现一个接口,需要将接口里面的函数进行重写。javax.microedition.lcdui.CommandListener有一个函数: • 此函数里面有两个参数: • 第一个参数是表示发出事件的Command按钮 • 第二个参数是表示发出事件的Diaplayable对象。

  32. 按钮事件 • 2:重写CommandListener里面的commandAction方法,编写事件响应代码; • 如下代码: • 表示将Command按钮所在的Displayable标题改为“按钮被选择”。 • 3:将事件源和事件响应对象绑定。事件处理类编写完之后,只是能够处理事件,并不能保证Command按钮被选择之后会触发事件,因此还需要将Command按钮和事件处理类(CommandListener)对象绑定。 public void commandAction(Command c,Displayable d){ d.setTitle("按钮被选择"); }

  33. 按钮事件 • 在JavaME中,由于Command是依附于Displayable的,因此,绑定的工作可以由Displayable完成。打开文档,找到javax.microedition.lcdui.Displayable,会发现有如下函数,将Displayable对象和CommandListener对象绑定:

  34. 上机习题一 • 在界面左方有一个“返回”按钮,在界面右方有一个菜单,包含3个按钮:“删除该号码”、“编辑该号码”和“退出程序”。选择右边的“删除该号码”、“编辑该号码”按钮,要求能够将按钮标题打印出来;选择右边的“退出程序”,要求退出该程序;选择左边的“返回”按钮,要求将Form标题改为:“返回”。例如,首先选择右边的“删除该号码”、“编辑该号码”按钮,然后选择左边的“返回”按钮,就得到如图的效果。

  35. List、TextBox,Ticker和Alert

  36. 前面讲到,Displayable的子类可以充满整个界面。Displayable的子类中,Screen用来创建高级界面。前面讲到,Displayable的子类可以充满整个界面。Displayable的子类中,Screen用来创建高级界面。 • 使用常用的高级界面类创建高级界面。

  37. List开发 • List用于开发能够充满整个界面的列表框。List在JavaME移动开发中应用较广,如图界面,就是一个List的例子: • 界面上出现一个列表框,该列表框中有4个选项:“删除该号码”、“向该号码发送短信”、“编辑该号码”和“将该号码设置为好友”;这个列表框可以进行多选,用户将光标定位到某一项,按下选择键,就可以进行选择。其中,第1项的字体为大号粗斜体;第4项有一个图片标记。

  38. List类型 • List是列表框,是Displayable的子类,可以充满整个界面。因此,List添加到界面上的方法和Form完全相同。打开文档,找到javax.microedition.lcdui.List,构造函数有2个: • 1. • 第一个参数是给List一个标题,是字符串; • 第二个参数决定了List的类型,为静态变量定义的整数。

  39. List类型 • 2. • 参数1和参数2的意义和前面一个构造函数相同。参数3是一个字符串数组,确定列表框内的选项;参数4是一个图片数组,确定列表框内各个选项前的图片。如果不要图片,则用null表示。

  40. List类型 • 参数listType可以有3种选择,代表了List的3种类型,分别是: • List. EXCLUSIVE:互斥,表示只能选择一个选项,每个选项左边有一个单选按钮,将光标定位到该选项之后,必须按下选择键才能选择该选项。 • List. IMPLICIT:另一种互斥,光标定位到该选项,就表示该项被选择。 • List.MULTIPLE:多选,光标定位到某选项,按下选择键,该选项前面的方框会被打勾,如果光标定位在一个被打勾的选项,再次按下选择键,则选项前面方框内的勾会消失。

  41. List类型 • 一般使用的是第一个构造函数。 • 如果使用第一个构造函数,列表框内的选项应该一项项添加。List可以通过如下函数来添加选项: • 第一个参数是项目的字符串内容,也就是选项标题; • 第二个参数是项目的图片对象,如果为null,表示不要图片。 • 选项添加之后,每个选项都有一个编号,从0开始。

  42. 字体 • 列表框的第一项字体为大号粗斜体,在List类中,有一个函数: • 通过这个函数可以设置某个项目的字体,参数1是选项的编号,参数2是字体对象。

  43. 字体 • 字体类javax.microedition.lcdui.Font,这个类没有构造函数。一般是通过它里面的静态函数来生成对象,Font类中有如下函数: • 参数1为整数,表示字体的类型,一般可以有如下选择:Font.FACE_SYSTEM;Font.FACE_MONOSPACE;Font. FACE_PROPORTIONAL。 • 参数2为字体风格,可以选择:Font.STYLE_PLAIN:普通风格;由Font.STYLE_BOLD(粗体)、Font. STYLE_ITALIC(斜体)和Font.STYLE_UNDERLINED(下划线)的组合,组合时风格之间用“|”隔开。 • 参数3为字体大小,可以选择:Font. SIZE_LARGE:大号字体;Font. SIZE_MEDIUM:中等字体;Font. SIZE_SMALL:小号字体。

  44. 字体 • 关于字体,还有几个重要函数,在Font文档中,可以看到: • 1:得到字符的高度: • 2:得到某字符的宽度: • 3:得到某字符串的宽度: • 这些函数在界面画图和字符排版中非常有用。

  45. 图片 • 列表框的第4项前有一个图片。在List中添加项目时,用到append函数,其中参数2是一个Image对象:

  46. 图片 • 图片类javax.microedition.lcdui.Image。没有构造函数,通过它里面的静态函数createImage来生成对象,这个函数有好几个版本,其中最常见的是: • 参数为文件路径。注意在项目的树型目录下面有一个res目录,可以将图片放在这里,这个目录就作为资源的根目录“/”,可以写绝对路径。

  47. 图片 • 关于图片,还有几个重要函数,在Image文档中,可以看到: • 1:得到图片的高度: • 2:得到图片的宽度:

  48. List例子

  49. List的功能 • 对于List内项目的维护,从List文档可以看到,List类内提供了很多方法。 • 单选列表框还有一种风格:List.IMPLICIT。当List的类型为List.IMPLICIT时,光标移动到某项,然后按下选择键,系统能够自动由List.SELECT_COMMAND发出命令。

More Related