J2ME手机蓝牙娱乐平台.doc

上传人:laozhun 文档编号:2393708 上传时间:2023-02-17 格式:DOC 页数:28 大小:325KB
返回 下载 相关 举报
J2ME手机蓝牙娱乐平台.doc_第1页
第1页 / 共28页
J2ME手机蓝牙娱乐平台.doc_第2页
第2页 / 共28页
J2ME手机蓝牙娱乐平台.doc_第3页
第3页 / 共28页
J2ME手机蓝牙娱乐平台.doc_第4页
第4页 / 共28页
J2ME手机蓝牙娱乐平台.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《J2ME手机蓝牙娱乐平台.doc》由会员分享,可在线阅读,更多相关《J2ME手机蓝牙娱乐平台.doc(28页珍藏版)》请在三一办公上搜索。

1、基于J2ME+蓝牙技术的休闲娱乐平台设计与实现摘 要随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。特别是手机性能的逐渐增强,手机作为一个娱乐平台越来越成熟了。本课题着眼于J2ME技术的应用,利用JSR082蓝牙Java API的软件包,使这些移动设备交换任意的基于文本的消息,以及简单的游戏对战,开发出一款可用的手机蓝牙娱乐平台。全文介绍了J2ME的相关技术及本程序的结构分析和具体功能的实现。关键词:J2ME;手机;蓝牙;娱乐平台J2ME + Bluetooth based Pla

2、tform Entertainment Design and ImplementationAbstract When mobile phone is getting ever more popular nowadays, with the implementation of Java technology on mobile equipment, increment of capital on communication service exhibits its force on peoples everyday life, providing them ever fast informati

3、on just in hand. Mobile phone whose capability is greater is more and more mature for game. This dissertation focuses on implementation of J2ME technology,used JSR082 Bluetooth Java API to drive these investments exchange test messages,simpily multiply games by using client useful Java API,to develo

4、ped a Bluetooth Entertainment Platform run on mobile phones.This dissertation introduces J2ME and its relative technology as well as this programs structure and analysis of implementation in details. Keywords: J2ME; mobile phone;Bluetooth; Platform Entertainment目 录1引言- 1 -1.1技术背景- 1 -1.2开发意义- 1 -1.3

5、开发环境- 1 -2 J2ME理论及相关技术- 2 -2.1概述- 2 -2.2 J2ME蓝牙应用开发及其实现- 2 -2.2.1 J2ME软件架构- 2 -2.2.2 蓝牙技术- 3 -2.2.3 Java蓝牙应用模型- 3 -2.2.4 Java蓝牙API概述- 3 -2.2.5 蓝牙应用的实现- 4 -3 系统分析与实现- 6 -3.1系统功能设计- 6 -3.2系统构架- 6 -3.3系统实现- 8 -3.3.1 MIDLET主类- 8 -3.3.2 蓝牙搜索与服务- 9 -3.3.3 聊天室实现- 16 -3.3.4 蓝牙五子棋实现- 17 -3.4系统测试- 19 -4结束语- 2

6、2 -致 谢- 23 -参考文献- 24 -1引言1.1技术背景随着无线技术的飞速发展以及移动信息技术的进一步成熟,出现了很多有关无线应用开发的技术。从最简单的电视遥控器,到今天已经普及的手机。人们已经越来越习惯于无线传输技术带来的种种方便。手机上网,似乎已经不是什么新概念了,传统的方式就是用数据线或者计算机的红外线接口将手机和笔记本电脑或其它的电脑设备相连。但这两种方式都有很多的不便数据线太麻烦,红外线接口距离短不说,还要保证连接时没有障碍物阻隔。本课题实现了另一短距离无线通信协议”蓝牙”,蓝牙技术具有无需通信费用、数据传输范围更大、安全性更好等特点,将成为各种便携式设备进行无线连接的新标准

7、。1.2开发意义目前来看,移动电话是蓝牙技术的最大应用领域,也是已经有实际应用的领域。通过在移动电话中植入蓝牙技术,可以实现无线耳机、车载电话等功能,还能实现与便携式计算机和其他手持设备的无电缆连接,组成一个方便灵活的PAN,使人们能够随时随地实现个人区域内语音和数据的交换与传输。随着技术的发展和完善,蓝牙必将对人们的生活和工作产生重大影响。本课题是对蓝牙技术的一些实践,设计实现一个基于蓝牙的手机娱乐应用程序。程序主要应用J2ME技术及其蓝牙规范。由于遵循移动信息设备配置(MIDP),所以该程序可以被下载到拥有Java虚拟机的手机上运行,或直接在电脑上运行,实现手机间的蓝牙聊天游戏功能。蓝牙充

8、当一个短距离的无线连接接口,该聊天应用程序在其形成的蓝牙无线个人局域网(PAN)内,聊天信息的传输与一般聊天软件相比具有速度更快,成本和功耗更低并且无费用的优点。1.3开发环境软件环境:Windows7 Build 7100RC 32位版Sun JDK 1.6Eclipse 3.5 pulsar for Mobile JavaSun Wireless Tool Kit 2.5.2硬件环境:基于AMD处理器64位PC2 J2ME理论及相关技术2.1概述J2ME即JAVA 2 Micro Edition,它是Java 2的组成部分,与J2SE、J2EE并称。J2ME是一种高度优化的Java运行环境

9、,应用于大量的消费类电子设备,如Cellular Phones(蜂窝电话)、Screen Phones(可视电话)、Digital Set-top Boxes(数字机顶盒)、Car Navigation Systems(汽车导向系统)等,同时也广泛被移动通信设备所采用,如移动电话、双向寻呼机、智能卡、个人电脑记事本(Personal Organizer)和掌上电脑(Palmtop)等。J2ME技术将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。J2ME 使用配置和简表定制 Java 运行时环境 (JRE)。作为一个完整的 JRE,J2ME 由配置和简表组

10、成,配置决定了使用的 JVM,而简表通过添加特定于域的类来定义应用程序。与以前 Sun 公司推出的J2EE (Java 2 Enterprise Edition,Java 2企业版)、J2SE (Java 2 Standard Edition,Java 2标准版)规范相比,J2ME 不是一个单独的技术规范,而是一系列技术规范总称。这些规范定义了 Java 技术在资源限制的设备中的表现形式。J2ME 主要适用于小型嵌入式设备,这些设备与PC或是服务器设备相比没有统一的硬件标准、外观与操作方式,其功用也是千差万别。但是J2ME 在适用于这些设备的同时也保留了 Java 的传统特性,即任何时间和任何

11、地点的代码具有可移植性、部署灵活性、安全的网络传输性,以及代码稳定性。正是因为如此,开发人员才可以借助J2ME 力量让编写的程序能够运行在其他型号或厂商的设备上。2.2 J2ME蓝牙应用开发及其实现2.2.1 J2ME软件架构J2ME平台由多种配置(Configuration)简表(Profile)和可选包(Optional Package)f组成。表2-1为J2ME平台的体系结构。操作系统位于J2ME运行环境的最底层,操作系统可以是Linux,Symbian或者PalmOS这充分体现了Java语言的跨平台性。配置由Java虚拟机和一系列的API集合组成,为某一范围内的嵌入式设备提供基本的功能

12、,这些设备通常在硬件和软件上具有类似的特性。目前,J2ME平台主要包含两个配置:连接设备配置(ConnectedDeviceConfigurationCDC)和连接受限设备配置(conneetedLimitedDevice Configuration。CLDC)。简表位于配置之上,为运行环境提供高层的API,例如,应用程序模型和图形用户界面等。1CLDC上采用最广泛的简表是移动信息设备简表(Mobile lnformationDeviceProfile,MIDP)。基于CLDC与MIDP的J2ME平台主要面对的目标设备是移动电话。J2ME平台可以通过添加可选包(OptionalPackage)

13、进行扩展。可选包是针对特殊技术的实现。因此它定位的是特定范围的设备,而不适合作为一项固有功能定义在MIDP中。随着移动终端设备内存和处理器能力的提高,越来越多的可选包被添加到具体的J2me平台上。Optional PackageProfileConfigurationJava Virtual MachineHost Operating System表2-1 J2ME平台的体系结构2.2.2 蓝牙技术所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,利用“蓝牙”技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手机等移动通信终端设备之间的通信,也能够成功地简化以上这些设备与因特网

14、Internet之间的通信,从而使这些现代通信设备与因特网之间的数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。2.2.3 Java蓝牙应用模型2002年4月5日。Java开发社区(JCP)发布了基于J2ME平台的蓝牙API规范JSR82,这是第一个针对蓝牙开发环境的标准。蓝牙标准是一项开放的标准,由蓝牙技术联盟(SIG,SpecialInterest Group)负责管理。蓝牙技术的最新版本是2.0,但

15、市场上的蓝牙设备大都停留在1.1版本。开发基于蓝牙通信的应用程序通常采用客户端一服务器的应用程序模型。服务(Service)是通信的核心所在,一个蓝牙服务就是一个作为服务器运行的应用程序。这个服务向客户端提供某种功能性的服务。例如,客户端可以连接打印机,使用它提供的打印服务。开发者一旦创建了一个服务之后需要首先把这个服务注册到服务查找数据库(Service Discovery DataBase.SDDB)中,然后等待客户端连接。客户端必须首先通过服务发现协议(SDP)查找到服务所在的设备,然后在设备上查询服务。一旦获得了服务,也就获得了连接服务器的URL。借助通用连接框架的方法即可获得相关的C

16、onnection权限,客户端就可以真正地使用服务器提供的服务了。2.2.4 Java蓝牙API概述java蓝牙无线技术API定义在javax.Bluetooth和javax.obex内。Javax.bluetooth:包含了核心的API。包括发现服务,设备管理,L2CAP等类。Javax.obex:一个不依赖于蓝牙核心API的数据交换包,属于高级API。这个包并不是必需的。由于很少有主流移动设备支持OBEX,本文主要讨论iavax.bluetooth包的实现。在javax.bluetooth中我们发现,Java蓝牙API可以被分解为三个部分:设备管理,服务发现和连接。2.2.5 蓝牙应用的实

17、现无论服务端还是客户端。蓝牙程序的第一步是进行初始化。该阶段主要是和LocalDevice类打交道。首先通过getLocalDevice()方法取得LocalDevice实例对象,如果是服务端,还需调用setDiscoverable ()方法设置好模式. private LocalDevice localDevice;/本地设备实例String localBTAddress;/本地蓝牙地址String localBTName;/蓝牙名称DiscoveryAgent agent;/发现代理trylocalDevice=LocalDevice.getlocalDevice();/取得本地设备实例I

18、f(!localDevice.setDiscoverable(DiscoveryAgent.GIAC)/设置服务器可发现return false;localBTAddress=localDevice.getBluetoothAddess();/记录蓝牙地址localBTName=localDevice.getFriendlyName();/记录蓝牙名称agent=localDevice.getDicoveryAgent();/取得蓝牙代理catch(Exception e)System.err.println(“初始化蓝牙设备失败:”+e);一个远端设备类RemoteDevice的实例代表了一

19、个远端蓝牙设备。在一个蓝牙客户端应用程序可以进行服务消费之前它必须发送一个设备请求来发现远端设备。典型的蓝牙应用程序和远端设备之间的关系是一对多。String remoteBTAddress;/远端蓝牙地址String remoteBTName;/远端蓝牙名称RemoteDevice remoteDevice;/远端设备StreamConnection con;/连接trycon=(StreamConnection)Connector.open(url);/打开连接remoteDevice=RemoteDevicegetRemoteDevice(con);/获取远端设备remoteBTAddr

20、em=remoteDevicegetBluetoothAddress();/取得远端设备蓝牙地址remoteBTName=rvmoteMcegetFriendlyName(false);/取得远端设备名称catch(Exception e)/处理异常在蓝牙无线网络中。客户端通常不能直接得到服务端的蓝牙地址,而需使用服务发现API帮助客户端搜索周围提供的设备和服务。为了消费一项服务客户端通常需要经过三个步骤:搜索设备搜索服务和连接通信。服务代理类(DiscoveryAgent)同时支持设备与服务的发现。当设备和服务被发现时,想得到通知的客户端应用程序必须实现并注册DiscoveryListene

21、r接口这个接口定义了设备发现通知和服务发现通知的回调。服务器和客户端的连接:在连接的URL中主机名称告诉连接工厂是否它应该创建一个客户端异或服务器端。如果使用单词localhost作为主机名将定义一个服务器连接。客户端想要连接到一个指定的的服务可以通过调用ServiceRecord.getConnectionURL()来找到该服务连接的URL。蓝牙可以支持两种类型的连接:(1)使用服务端连接:首先通过L2CAPconnectionNotifier或StreamConnectionNotifier建立一个连接,同时创建一个蓝牙服务。L2CAPConnectionNotifier notifier

22、=(L2CAPConnectionNotifier)Connectoropen(url);然后调用acceptAndOpen()方法,该方法会自动将服务注册到蓝牙发现数据库中(SDDB)之后该服务就可以被客户端搜索了。该方法同时返回一个用于通信的连接。L2CAPConnection con=notifier.acceptAndOpen();(2)使用客户端连接:虽然客户端也是通过Connector.open(url)建立连接参数url通常不是直接给出的,而是通过serviceRecord.getConnectionURL()得例如:String url=secviceRecordgetConn

23、ectionURL(int requiredSecurity,boolean mustBeMaster);L2CAPConnection con=(L2CAPConneetion)Connector.open(url);3 系统分析与实现3.1系统功能设计根据软件的开发目的,主要实现以下功能:用户登录,双人聊天室,多人聊天室,双人五子棋对战,平台帮助。组织结构如图3-1:图3-1用户登录模块:实现平台的蓝牙用户登录,区别不同的用户以及服务端。聊天模块:实现平台的双人或者多人聊天功能。游戏模块:实现平台的双人蓝牙对战五子棋功能。帮助模块:平台的版本信息及游戏规则说明。3.2系统构架平台设计所用技

24、术与方法:(1)JSR82蓝牙编程API;(2)多线程编程模式;(3)客户端/服务器编程模式。平台工程全部类结构图3-2:图3-23.3系统实现3.3.1 MIDLET主类flat包中的FlatMainMDlet.java文件中的FlatMainMIDlet类是整个程序的主类,功能是控制整个程序的流程与个人子程序界面的显示。代码如下:package flat;import javax.microedition.lcdui.Display;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDlet

25、StateChangeException;/* */* * FlatMainMIDlet 游戏娱乐平台的主类 * 责负整个平台的运作 */public class FlatMainMIDlet extends MIDlet /*/*登录窗口*/ protected LoginWindow loginWindow = null; /*/*游戏娱乐平台的菜单*/ protected MainMenu flatMenu = null ; private boolean isFirst = true; public Display display = null; /* */* * 休闲娱乐平台的初使化

26、 FlatMainMIDlet的构造函数 * 进行游戏的初始化 */public FlatMainMIDlet() display = Display.getDisplay(this); /* */*程序结束*/protected void destroyApp(boolean uncondition) throws MIDletStateChangeException notifyDestroyed(); /* */*程序暂停*/ protected void pauseApp() . /* */*程序开始*/protected void startApp() throws MIDletSt

27、ateChangeException if(isFirst) loginWindow = new LoginWindow(this); display.setCurrent(loginWindow); isFirst = false; /* */*显示主菜单*/ public void showFlatMenu() if(flatMenu!=null) display.setCurrent(flatMenu); /* */*退出休闲平台*/ public void exitFlat() . try . destroyApp(true); catch (MIDletStateChangeExce

28、ption e) . /*/*FlatMainMIDlet.java文件结束*/3.3.2 蓝牙搜索与服务common包中两个类对于整个系统来说是非常重要的,同时它们涉及到JSR82API的应用,所以这个包中的两个类的功能实现是一个技术点。先介绍ServiceSearcher类,ServiceSearcher类实现两个接口,第一个接口是Runnable,这样做的目的是使其成为一个线程类,其它类调用它的时候就是会在后台产生一个任务线程。第二个接口就是DiscoveryListener,目的是要利用JSR82中的API,有关与蓝牙搜索设备与服务的模式与方法是不难理解的,具体的实现如代码所示,代码里

29、边利用到了线程同步的机制,还有如何获取用户服务记录属性的值方法。代码如下:package common;import java.util.Vector;import javax.bluetooth.BluetoothStateException;import javax.bluetooth.DeviceClass;import javax.bluetooth.DiscoveryAgent;import javax.bluetooth.DiscoveryListener;import javax.bluetooth.LocalDevice;import javax.bluetooth.Remot

30、eDevice;import javax.bluetooth.ServiceRecord;import javax.bluetooth.UUID;* ServiceSearcher类 * 用于搜索两种服务 * UUID-11111111111111111111111111111111 * 两个聊天室 * UUID-22222222222222222222222222222222 * 多个聊天室 public class ServiceSearcher implements Runnable, DiscoveryListener . /*/*服务类型名*/ private String serv

31、iceName = null; /*/*聊天室列表类*/ private RoomList chatRoomList = null; /*/*本地设备*/ private LocalDevice localDevice = null; /*/*服务代理*/ private DiscoveryAgent agent = null; /*/*发现的设备*/ private Vector deviceFound = null; /*/*发现的服务*/ private Vector serviceFound = null; public ServiceSearcher(String serviceNa

32、me,RoomList roomList) . this.serviceName = serviceName; this.chatRoomList = roomList; /*/*开始搜索线程*/ new Thread(this).start(); /* */* * 开始搜索 */ public void run() . doSearchDevices(); /* */* * 服务记录搜索的方法 */ public void doSearchDevices(). try . localDevice = LocalDevice.getLocalDevice(); catch (Bluetooth

33、StateException e) . e.printStackTrace(); agent = localDevice.getDiscoveryAgent(); deviceFound = new Vector(); serviceFound = new Vector(); try . if(!agent.startInquiry(DiscoveryAgent.GIAC, this) . return; catch (BluetoothStateException e) . /* */* * 服务搜索的方法 * param remoteDevice * return void */ publ

34、ic void doServiceSearch(RemoteDevice remoteDevice). /*/*服务记录属性值的ID,用户自定义的属性值*/ int attributes = .0x1234,0x1235; /*/*服务记录的UUID*/ UUID uuids = new UUID2; uuids0 = new UUID(serviceName, false); uuids1 = new UUID(0x1101); try . agent.searchServices(attributes, uuids, remoteDevice, this); catch (Bluetoot

35、hStateException e) . /*/*服务搜索失败的处理*/ return; /* */* * 服务器设备发现的处理 * param remoteDevice, deviceClasss * return void */ public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) . /*/*加入搜索到的服务器设备*/ deviceFound.addElement(remoteDevice); /* */* * 服务器设备搜索到服务设备的处理 * param disType * r

36、eturn void */ public void inquiryCompleted(int disType) . switch(disType) . /*/*成功完成搜索的处理*/ case DiscoveryListener.INQUIRY_COMPLETED: for(int i= 0; ideviceFound.size(); i+). doServiceSearch(RemoteDevice)deviceFound.elementAt(i); /*/*实现一次搜一个服务器设备的服务记录的同步*/ synchronized(this). try . this.wait(); catch

37、 (InterruptedException e) . e.printStackTrace(); addRoomMessage(); break; case DiscoveryListener.INQUIRY_TERMINATED: break; case DiscoveryListener.INQUIRY_ERROR: break; /*/*不利用服务搜索完成方法*/ public void serviceSearchCompleted(int transID, int respCode) . /* */* * 搜索到服务的处理 * param tarnsID, serviceRecord

38、* return void */ public void servicesDiscovered(int transID, ServiceRecord serviceRecord) . /*/*加入搜索到的服务记录*/ serviceFound.addElement(serviceRecord0); /*/*实现一次搜一个服务器设备的服务记录的同步*/ synchronized(this). this.notifyAll(); /* */* * 增加搜到的聊天室列表 * param 无 * return 无 */ private void addRoomMessage() . ServiceRe

39、cord tempRecord= null; chatRoomList.roomURLList = new StringserviceFound.size(); chatRoomList.roomNameList = new StringserviceFound.size(); /*/*删除原先的String*/ chatRoomList.deleteAll(); for(int i=0; iserviceFound.size(); i+) . /*/*获得服务器端的服务记录*/ tempRecord = (ServiceRecord)serviceFound.elementAt(i); /*

40、/*获得服务器端的服务记录的链接字符串并加入到聊天室的链接列表*/ chatRoomList.roomURLListi= tempRecord.getConnectionURL( ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); /*/*获得服务记录的用户自定义的服务属性并加入到聊天室名的列表*/ String str =(String)(tempRecord.getAttributeValue(0x1234).getValue(); chatRoomList.append(str, null); chatRoomList.roomNameList

41、i = str; /ServiceSercher.java结束package common;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.List;import chat.MultiChatRoomClient;import chat.PairChatRoomClient;import flat.FlatMainMIDlet;import game.GameClient;/* */* * RoomList 类 * 显示蓝牙网络中开放的如娱乐房间的列表。 * 提供给用户选择进入感趣兴的娱乐房间。 */public class RoomList extends List

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号