210 likes | 336 Views
《 J2ME 程序开发设计(下) 》 专业教程 理论讲解部分 Ver 3.1. 课程概述. WMA 编程 蓝牙编程. 重点. 学习目标. WMA 编程. 1. 掌握无线消息的编程 2. 了解 J2ME 蓝牙编程. 难点. 蓝牙编程. 第 4 章 无线消息和蓝牙编程. 第 4 章 无线消息和蓝牙编程. 4.1 WMA编程. 4.1.1 WMA 概述.
E N D
《J2ME程序开发设计(下)》 专业教程 理论讲解部分 Ver 3.1
课程概述 WMA编程 蓝牙编程 重点 学习目标 WMA编程 1.掌握无线消息的编程 2.了解J2ME蓝牙编程 难点 蓝牙编程 第4章 无线消息和蓝牙编程
第4章 无线消息和蓝牙编程 4.1 WMA编程 4.1.1 WMA概述 WMA(无线消息,Wireless Message API)是一个基于GCF的可选包,因为它所要求的最低configuration为CLDC,因此它也可以移植到CDC上面去。在可发送接收无线消息的诸如手提电话设备上运行的J2ME应用程序都可以得到WMA的支持。
4.1 WMA编程 4.1.2 WMA API的总体结构
4.1 WMA编程 4.1.2 WMA API的总体结构
4.1 WMA编程 4.1.3WMA中的异常 当使用WMA的时候,可能会碰到需要处理的异常。比如当创建MessageConnection的时候,当应用程序缺乏足够的权限的时候或者平台没有足够的资源的时候,都有可能抛出异常。 详见教材表4-2
4.1 WMA编程 4.1.4 Message接口 • javax.wireless.messaging.Message是WMA中各种消息的基类。所谓消息,就是通讯双方发送和接收、产生和消费的东西。 • 在某种程度上,消息类似于数据报,它有源地址和目的地址、载荷、发送和阻塞方法。WMA提供了更多的附加功能,比如支持文本消息和二进制消息,还有异步接收消息的听众(Listener)接口。 • WMA定义了2个Message子接口:BinaryMessage和TextMessage,而且规范是可扩展的,允许增加更多的消息类型。 • 至于消息和相关的控制信息是如何编码来进行传输,这一点WMA并不关心,它交给底层的通讯协议负责。
4.1 WMA编程 4.1.4 Message接口 • BinaryMessage接口代表以二进制为内容的消息,包括相应的获取和设置方法。通用的获取和设置消息地址、获取时间戳等方法则继承于Message。 • TextMessage子接口代表以文本为内容的消息,例如文本短消息。TextMessage提供方法设置与获取文本内容(String对象)。在消息发送和接收之前,底层负责把这个String编码或者解码成正确的格式。例如GSM 7-bit或者UCS-2。通用的获取和设置消息地址,获取时间戳等方法则继承于Message。
4.1 WMA编程 4.1.5 MessageConnection接口
4.1 WMA编程 4.1.5 MessageConnection接口 创建客户端连接: (MessageConnection)Connector.open("sms://+5121234567:5000"); 创建服务端连接: (MessageConnection)Connector.open("sms://:5000");
4.1 WMA编程 4.1.6 MessageListener接口 该接口中只有一个方法notifyIncomingMessage(),当接收到一个消息的时候,平台就激发该方法。 使用MessageConnection.setListener()方法来注册消息听众。 因为平台实现有可能是单线程,notifyIncomingMessage方法的处理时间要尽可能缩短,最好用单独的线程来处理方法所接收到的消息。
4.1 WMA编程 4.1.7 使用WMA来发送和接收消息 1.创建MessageConnection public MessageConnection newMessageConnection(String addr) throws Exception { return((MessageConnection)Connector.open(addr)); }
4.1 WMA编程 4.1.7 使用WMA来发送和接收消息 2.创建,发送文本消息 TextMessage tmsg =(TextMessage)mc.newMessage (MessageConnection.TEXT_MESSAGE); if (url!= null) tmsg.setAddress(url); tmsg.setPayloadText(msg); mc.send(tmsg);
4.1 WMA编程 4.1.7 使用WMA来发送和接收消息 3.创建,发送二进制消息 BinaryMessage bmsg = (BinaryMessage)mc.newMessage (MessageConnection.BINARY_MESSAGE); if (url!= null) bmsg.setAddress(url); bmsg.setPayloadData(msg); mc.send(bmsg);
4.1 WMA编程 4.1.7 使用WMA来发送和接收消息 4.接收消息 MessageProcessor的类,该类实现Runnable接口等待和处理消息。 注意:MessageProcessor既支持单次的消息处理,也支持循环的消息处理。 可以对来源于连接的所有消息使用同一个MessageProcessor处理(这样线程会阻塞直到消息到达,然后处理消息), 也可以使用一个MessageListener对接收到的每一个消息采用一个单消息处理的Message processor。 详见教材代码
4.1 WMA编程 4.1.7 使用WMA来发送和接收消息 4.接收消息 MessageConnection的numberOfSegments()方法来获取消息分批发送的次数 还可以通过获取wireless.messaging.sms.smsc系统属性来获取短信息服务中心的地址: String smsc = System.getProperty("wireless.messaging.sms.smsc"); 详见教材代码
4.1 WMA编程 源代码剖析: WMADemo项目
第4章 无线消息和蓝牙编程 本课小结 本课介绍了WMA的体系结构,WMA的常用编程模式,然后用一个完整的例子演示了WMA的使用。
第4章 无线消息和蓝牙编程 小测验 问答题: 1.WMA中,Message类的两个子类是? 2.MessageConnection和GCF的关系如何? 3.如何使用教材中的MessageProcessor类
小测验 问答题: 1.WMA中,Message类的两个子类是? 答:TextMessage,BinaryMessage 2.MessageConnection和GCF的关系如何? 答:MessageConnection是Connection的子接口,由Connector打开 3.如何使用教材中的MessageProcessor类 答:可以对来源于连接的所有消息使用同一个MessageProcessor处理(这样线程会阻塞直到消息到达,然后处理消息)也可以使用一个MessageListener对接收到的每一个消息采用一个单消息处理的Message processor。
第4章 无线消息和蓝牙编程 课后作业 【作业1】剖析WMADemo项目,并且把它放到真机上运行