已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于J2ME+藍牙技術(shù)的休閑娛樂平臺設(shè)計與實現(xiàn)摘 要隨著手機的日益普及、Java功能在移動設(shè)備上的實現(xiàn),Java應(yīng)用程序產(chǎn)生的手機增值服務(wù)逐漸體現(xiàn)出其影響力,對豐富人們的生活內(nèi)容、提供快捷的資訊起著不可忽視的作用。特別是手機性能的逐漸增強,手機作為一個娛樂平臺越來越成熟了。本課題著眼于J2ME技術(shù)的應(yīng)用,利用JSR082藍牙Java API的軟件包,使這些移動設(shè)備交換任意的基于文本的消息,以及簡單的游戲?qū)?zhàn),開發(fā)出一款可用的手機藍牙娛樂平臺。全文介紹了J2ME的 技術(shù)及本程序的 體功能的實現(xiàn)。關(guān)鍵詞:J2ME 手機 藍牙 娛樂平臺J2ME + Bluetooth based Platform Entertainment Design and ImplementationAbstractWhen 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 information 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 developed 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 技術(shù) .1 1.2 開發(fā)意 .1 1.3 開發(fā) .1 2 J2ME 及 技術(shù) .2 2.1 .2 2.2 J2ME 藍牙應(yīng)用開發(fā)及其實現(xiàn) .2 2.2.1 J2ME 軟件 .2 2.2.2 藍牙技術(shù) .3 2.2.3 Java 藍牙應(yīng)用 .3 2.2.4 Java 藍牙 API .3 2.2.5 藍牙應(yīng)用的實現(xiàn) .3 3 實現(xiàn) .6 3.1 功能設(shè) .6 3.2 .6 3.3 實現(xiàn) .8 3.3.1 MIDLET .8 3.3.2 藍牙 服務(wù) .9 3.3.3 實現(xiàn) .16 3.3.4 藍牙實現(xiàn) .17 3.4 .18 4 currency1 .22 “ .23 文 .24 I 1引言1.1技術(shù)背景隨著fifl技術(shù)的 發(fā)以及移動息技術(shù)的一 成熟,出現(xiàn)了 fifl應(yīng)用開發(fā)的技術(shù)?!焙唵蔚囊?, 普及的手機。人們越來越于fifl技術(shù)來的 。手機上, 不是 了, 的 是用 fl 機的 fl 手機 本 其的 設(shè)備 。這 的不 fl , fl 不 , 。本課題實現(xiàn)了一 fifl 藍牙 ,藍牙技術(shù) fi 用、 范圍更大、安全性更好等特點, 成為各攜 設(shè)備行fifl的標準。1.2開發(fā)意義目前來看,移動話是藍牙技術(shù)的”大應(yīng)用領(lǐng)域,也是實際應(yīng)用的領(lǐng)域。過在移動話中植入藍牙技術(shù),可以實現(xiàn)fifl耳機、車載話等功能, 能實現(xiàn) 攜機 其他手持設(shè)備的fi纜 ,組成一個 靈活的PAN,使人們能夠隨 隨地實現(xiàn)個人區(qū)域內(nèi)currency1音 的交換 。隨著技術(shù)的發(fā) 完善,藍牙必 對人們的生活 工作產(chǎn)生重大影響。本課題是對藍牙技術(shù)的一些實踐,設(shè) 實現(xiàn)一個基于藍牙的手機娛樂應(yīng)用程序。程序 應(yīng)用J2ME技術(shù)及其藍牙規(guī)范。由于遵循移動息設(shè)備配置(MIDP),所以該程序可以被下載擁Java虛擬機的手機上運行, 直 在 上運行,實現(xiàn)手機間的藍牙游戲功能。藍牙充當(dāng)一個 的fifl ,該 應(yīng)用程序在其形成的藍牙fifl個人局域(PAN)內(nèi), 息的 一般 軟件 比 度更快,成本 功耗更低并且fi 用的優(yōu)點。1.3開發(fā)環(huán)境軟件 :Windows7 Build 7100RC 32位版Sun JDK 1.6Eclipse 3.5 pulsar for Mobile JavaSun Wireless Tool Kit 2.5.2硬件 :基于AMD處 64位PC1基于J2ME+藍牙技術(shù)的休閑娛樂平臺2 J2ME理論及相關(guān)技術(shù)2.1概述J2ME即JAVA 2 Micro Edition,是Java 2的組成部 , J2SE、J2EE并稱。J2ME是一高度優(yōu)化的Java運行 ,應(yīng)用于大量的消 設(shè)備,如Cellular Phones(蜂窩話)、Screen Phones(可視話)、Digital Set-top Boxes( 字機頂盒)、Car Navigation Systems(汽車導(dǎo)向 )等,同 也廣泛被移動設(shè)備所采用,如移動話、雙向?qū)ず魴C、智能卡、個人 事本(Personal Organizer) 掌上 (Palmtop)等。J2ME技術(shù) Javacurrency1 的 平臺fi 的特性移植小 設(shè)備上,允許移動fifl設(shè)備之間共享應(yīng)用程序。J2ME 使用配置 簡表定制 Java 運行 (JRE)。作為一個完整的 JRE,J2ME 由配置 簡表組成,配置決定了使用的 JVM,而簡表過添加特定于域的 來定 應(yīng)用程序。以前 Sun 公司推出的J2EE (Java 2 Enterprise Edition,Java 2企業(yè)版)、J2SE (Java 2 Standard Edition,Java 2標準版)規(guī)范 比,J2ME 不是一個單獨的技術(shù)規(guī)范,而是一 列技術(shù)規(guī)范 稱。這些規(guī)范定 了 Java 技術(shù)在資 制的設(shè)備中的表現(xiàn)形 。J2ME 用于小 入 設(shè)備,這些設(shè)備 PC 是服務(wù) 設(shè)備 比 一的硬件標準、 作 ,其功用也是 別。是J2ME 在 用于這些設(shè)備的同 也 了 Java 的 特性,即任 間 任 地點的 可移植性、部 靈活性、安全的性,以及 定性。 是 為如 ,開發(fā)人 可以 J2ME 力量 的程序能夠運行在其他 的設(shè)備上。2.2 J2ME藍牙應(yīng)用開發(fā)及其實現(xiàn)2 2 1 J2ME軟件 J2ME平臺由配置(Configuration) 簡表(Profile) 可 包(Optional Package)f組成。表2-1為J2ME平臺的體 。 作 位于J2ME運行 的” , 作 可以是Linux,Symbian PalmOS 這充 體現(xiàn)了Javacurrency1 的平臺性。配置由Java虛擬機 一 列的API組成,為一范圍內(nèi)的 入 設(shè)備提供基本的功能,這些設(shè)備在硬件 軟件上 的特性。目前,J2ME平臺 包 個配置: 設(shè)備配置(ConnectedDeviceConfiguration CDC) currency1 設(shè)備配置(conneetedLimitedDevice Configuration。CLDC)。簡表位于配置之上,為運行 提供高的API,如,應(yīng)用程序 “形用等。1CLDC上采用”廣泛的簡表是移動息設(shè)備簡表(Mobile lnformationDeviceProfile,MIDP)?;贑LDC MIDP的J2ME平臺對的目標設(shè)備是移動話。J2ME平臺可以過添加可 包(OptionalPackage)行fi。可 包是fl對特 技術(shù)的實現(xiàn)。 定位的是特定范圍的設(shè)備,而不 作為一功能定 在MIDP中。隨著移動設(shè)備內(nèi) 處 能力的提高,越來越的可 包被添加 體的J2me平臺上。Optional PackageProfileConfigurationJava Virtual MachineHost Operating System2J2ME 及 技術(shù)表21 J2ME平臺的體 2 2 2 藍牙技術(shù)所藍牙(Bluetooth)技術(shù),實際上是一 fifl技術(shù),利用藍牙 技術(shù),能夠地簡化掌上 、 本 移動話手機等移動設(shè)備之間的,也能夠成功地簡化以上這些設(shè)備 特Internet之間的,而使這些現(xiàn) 設(shè)備 特之間的 ”更加高,為fifl 。藍牙采用 以及快 包技術(shù),持點對點及點對點,工作在全用的2.4GHz ISM即工業(yè)、 。其 為1Mbps。采用 雙工 實現(xiàn)全雙工。2 2 Java藍牙應(yīng)用 200245日。Java開發(fā) 區(qū)(JCP)發(fā) 了基于J2ME平臺的藍牙API規(guī)范 JSR82,這是 一個fl對藍牙開發(fā) 的標準。藍牙標準是一開 的標準,由藍牙技術(shù) (SIG,SpecialInterest Group) 。藍牙技術(shù)的”版本是2.0, 上的藍牙設(shè)備大 在1.1版本。開發(fā)基于藍牙的應(yīng)用程序采用 一服務(wù) 的應(yīng)用程序 。服務(wù)(Service)是的 所在,一個藍牙服務(wù) 是一個作為服務(wù) 運行的應(yīng)用程序。這個服務(wù)向 提供功能性的服務(wù)。如, 可以 機,使用提供的 服務(wù)。開發(fā) 一 了一個服務(wù)之 這個服務(wù)服務(wù) (Service Discovery DataBase.SDDB)中, 等 。 必過服務(wù)發(fā)現(xiàn) (SDP) 服務(wù)所在的設(shè)備, 在設(shè)備上 服務(wù)。一 了服務(wù),也 了 服務(wù) 的URL。 用 的 即可 的Connection , 可以 地使用服務(wù) 提供的服務(wù)了。2 2 Java藍牙API java藍牙fifl技術(shù)API定 在javax.Bluetooth javax.obex內(nèi)。Javax.bluetooth:包了的API。包發(fā)現(xiàn)服務(wù),設(shè)備 ,L2CAP等 。Javax.obex:一個不于藍牙 API的 交換包, 于高 API。這個包并不是必 的。由于 移動設(shè)備持OBEX,本文 討 iavax.bluetooth包的實現(xiàn)。在javax.bluetooth中我們發(fā)現(xiàn),Java藍牙API可以被 解為三個部 :設(shè)備 ,服務(wù)發(fā)現(xiàn) 。2 2 5 藍牙應(yīng)用的實現(xiàn)fi 服務(wù) 是 。藍牙程序的 一 是行初始化。該階 是 LocalDevice 交。 過getLocalDevice() 取LocalDevice實對象,如果是服務(wù), 調(diào)用setDiscoverable () 設(shè)置好 . private LocalDevice localDevice /本地設(shè)備實String localBTAddress /本地藍牙地址String localBTName /藍牙名稱DiscoveryAgent agent /發(fā)現(xiàn) trylocalDevice=LocalDevice.getlocalDevice() /取本地設(shè)備實If(!localDevice.setDiscoverable(DiscoveryAgent.GIAC)基于J2ME+藍牙技術(shù)的休閑娛樂平臺/設(shè)置服務(wù) 可發(fā)現(xiàn)return false localBTAddress=localDevice.getBluetoothAddess();/ 錄藍牙地址localBTName=localDevice.getFriendlyName() / 錄藍牙名稱agent=localDevice.getDicoveryAgent() /取藍牙 catch(Exception e)System.err.println(“初始化藍牙設(shè)備失?。?+e) 一個遠設(shè)備 RemoteDevice的實 表了一個遠藍牙設(shè)備。在一個藍牙 應(yīng)用程序可以行服務(wù) 消 之前 必發(fā)送一個設(shè)備請求來發(fā)現(xiàn)遠設(shè)備。典 的藍牙應(yīng)用程序 遠設(shè)備之間的 是一對。String remoteBTAddress /遠藍牙地址String remoteBTName /遠藍牙名稱RemoteDevice remoteDevice /遠設(shè)備StreamConnection con / trycon=(StreamConnection)Connector.open(url) /開 remoteDevice=RemoteDevice getRemoteDevice(con) / 取遠設(shè)備remoteBTAddrem=remoteDevice getBluetoothAddress() /取遠設(shè)備藍牙地址remoteBTName=rvmoteMce getFriendlyName(false) /取遠設(shè)備名稱catch(Exception e)/處 異在藍牙fifl 中。 不能直 服務(wù)的藍牙地址,而 使用服務(wù)發(fā)現(xiàn)API幫 周圍提供的設(shè)備 服務(wù)。為了消 一服務(wù) 過三個 驟: 設(shè)備 服務(wù) 。服務(wù) (DiscoveryAgent)同 持設(shè)備 服務(wù)的發(fā)現(xiàn)。當(dāng)設(shè)備 服務(wù)被發(fā)現(xiàn) ,想知的 應(yīng)用程序必實現(xiàn)并DiscoveryListener 這個 定 了設(shè)備發(fā)現(xiàn)知 服務(wù)發(fā)現(xiàn)知的回調(diào)。服務(wù)的 :在 的URL中 機名稱告訴 工 是否應(yīng)該 一個 異 服務(wù) 。如果使用單詞localhost作為 機名 定 一個服務(wù) 。 想一個指定的的服務(wù)可以過調(diào)用ServiceRecord.getConnectionURL()來 該服務(wù) 的URL。藍牙可以持 的 :(1)使用服務(wù) : 過L2CAPconnectionNotifier StreamConnectionNotifier立一個 ,同 一個藍牙服務(wù)。L2CAPConnectionNotifier notifier=(L2CAPConnectionNotifier)Connector open(url) 調(diào)用acceptAndOpen() J2ME 及 技術(shù),該 會自動 服務(wù)藍牙發(fā)現(xiàn) 中(SDDB) 之 該服務(wù) 可以被 了。該 同 返回一個用于的 。L2CAPConnection con=notifier.acceptAndOpen() (2)使用 :雖 也是過Connector.open(url) 立 url不是直 給出的,而是過serviceRecord.getConnectionURL() 如:String url=secviceRecord getConnectionURL(int requiredSecurity,boolean mustBeMaster) L2CAPConnection con=(L2CAPConneetion)Connector.open(url) 5基于J2ME+藍牙技術(shù)的休閑娛樂平臺3 系統(tǒng)分析與實現(xiàn)3.1系統(tǒng)功能設(shè)計根 軟件的開發(fā)目的, 實現(xiàn)以下功能:用登錄,雙人 ,人 ,雙人對戰(zhàn),平臺幫 。組織 如“3-1:“3-1用登錄 塊:實現(xiàn)平臺的藍牙用登錄,區(qū)別不同的用以及服務(wù)。塊:實現(xiàn)平臺的雙人 人 功能。游戲 塊:實現(xiàn)平臺的雙人藍牙對戰(zhàn)功能。幫 塊:平臺的版本息及游戲規(guī)則 明。3.2系統(tǒng)構(gòu)架平臺設(shè) 所用技術(shù) :(1)JSR82藍牙 程API (2)fl程 程 (3) /服務(wù) 程 。平臺工程全部 “3-2:6 實現(xiàn)“3-27基于J2ME+藍牙技術(shù)的休閑娛樂平臺3.3系統(tǒng)實現(xiàn) 1 MIDLET flat包中的FlatMainMDlet.java文件中的FlatMainMIDlet 是整個程序的 ,功能是制整個程序的 程 個人程序的顯示。 如下:package flat;import javax.microedition.lcdui.Display;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;/* */* FlatMainMIDlet 游戲娛樂平臺的 * 整個平臺的運作*/public class FlatMainMIDlet extends MIDlet/*/*登錄窗 */protected LoginWindow loginWindow = null;/*/*游戲娛樂平臺的菜單*/protected MainMenu flatMenu = null ;private boolean isFirst = true; public Display display = null;/* */* 休閑娛樂平臺的初使化 FlatMainMIDlet的 造函 * 行游戲的初始化*/public FlatMainMIDlet() display = Display.getDisplay(this);/* */*程序 */protected void destroyApp(boolean uncondition) throws MIDletStateChangeExceptionnotifyDestroyed();/* */*程序暫 */protected void pauseApp() ./* */*程序開始*/8 實現(xiàn)protected void startApp() throws MIDletStateChangeException 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 (MIDletStateChangeException e) ./*/*FlatMainMIDlet.java文件 */ 2 藍牙 服務(wù)common包中 個 對于整個 來 是非重 的,同 們涉及JSR82API的應(yīng)用,所以這個包中的 個 的功能實現(xiàn)是一個技術(shù)點。介紹ServiceSearcher ,ServiceSearcher 實現(xiàn) 個 , 一個 是Runnable,這樣做的目的是使其成為一個fl程 ,其 調(diào)用的 候 是會在 臺產(chǎn)生一個任務(wù)fl程。 二個 是DiscoveryListener,目的是 利用JSR82中的API, 藍牙 設(shè)備 服務(wù)的 是不難 解的, 體的實現(xiàn)如 所示, 里邊利用了fl程同 的機制,如 取用服務(wù) 錄 性的值 。 如下: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;9基于J2ME+藍牙技術(shù)的休閑娛樂平臺import javax.bluetooth.RemoteDevice;import javax.bluetooth.ServiceRecord;import javax.bluetooth.UUID;* ServiceSearcher * 用于 服務(wù)* UUID-11111111111111111111111111111111* 個 * UUID-22222222222222222222222222222222* 個 public class ServiceSearcher implements Runnable, DiscoveryListener ./*/*服務(wù) 名*/private String serviceName = null;/*/* 列表 */private RoomList chatRoomList = null;/*/*本地設(shè)備*/private LocalDevice localDevice = null;/*/*服務(wù) */private DiscoveryAgent agent = null;/*/*發(fā)現(xiàn)的設(shè)備*/private Vector deviceFound = null;/*/*發(fā)現(xiàn)的服務(wù)*/private Vector serviceFound = null;public ServiceSearcher(String serviceName,RoomList roomList).this.serviceName = serviceName;this.chatRoomList = roomList;/*/*開始 fl程*/new Thread(this).start();/* */* 開始 */public void run() .doSearchDevices();/* */* 服務(wù) 錄 的 */public void doSearchDevices().10 實現(xiàn)try .localDevice = LocalDevice.getLocalDevice(); catch (BluetoothStateException e) .e.printStackTrace();agent = localDevice.getDiscoveryAgent();deviceFound = new Vector();serviceFound = new Vector();try .if(!agent.startInquiry(DiscoveryAgent.GIAC, this).return; catch (BluetoothStateException e) ./* */* 服務(wù) 的 * param remoteDevice* return void */public void doServiceSearch(RemoteDevice remoteDevice)./*/*服務(wù) 錄 性值的ID,用自定 的 性值*/int attributes = .0x1234,0x1235;/*/*服務(wù) 錄的UUID*/UUID uuids = new UUID2;uuids0 = new UUID(serviceName, false);uuids1 = new UUID(0x1101);try .agent.searchServices(attributes, uuids, remoteDevice, this);catch (BluetoothStateException e) ./*/*服務(wù) 失敗的處 */return; /* */* 服務(wù) 設(shè)備發(fā)現(xiàn)的處 * param remoteDevice, deviceClasss* return void */11基于J2ME+藍牙技術(shù)的休閑娛樂平臺public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) ./*/*加入 的服務(wù) 設(shè)備*/deviceFound.addElement(remoteDevice);/* */* 服務(wù) 設(shè)備 服務(wù)設(shè)備的處 * param disType* return void*/public void inquiryCompleted(int disType) .switch(disType). /*/*成功完成 的處 */case DiscoveryListener.INQUIRY_COMPLETED:for(int i= 0; ideviceFound.size(); i+).doServiceSearch(RemoteDevice)deviceFound.elementAt(i);/*/*實現(xiàn)一次 一個服務(wù) 設(shè)備的服務(wù) 錄的同 */synchronized(this).try .this.wait(); catch (InterruptedException e) .e.printStackTrace();addRoomMessage(); break;case DiscoveryListener.INQUIRY_TERMINATED:break;case DiscoveryListener.INQUIRY_ERROR:break;/*/*不利用服務(wù) 完成 */public void serviceSearchCompleted(int transID, int respCode) ./* */* 服務(wù)的處 * param tarnsID, serviceRecord12 實現(xiàn)* return void */public void servicesDiscovered(int transID, ServiceRecord serviceRecord) ./*/*加入 的服務(wù) 錄*/serviceFound.addElement(serviceRecord0);/*/*實現(xiàn)一次 一個服務(wù) 設(shè)備的服務(wù) 錄的同 */synchronized(this).this.notifyAll();/* */* 增加 的 列表* param fi* return fi*/private void addRoomMessage().ServiceRecord tempRecord= null;chatRoomList.roomURLList = new StringserviceFound.size();chatRoomList.roomNameList = new StringserviceFound.size();/*/*刪除原的String*/chatRoomList.deleteAll();for(int i=0; iserviceFound.size(); i+)./*/* 服務(wù) 的服務(wù) 錄*/tempRecord = (ServiceRecord)serviceFound.elementAt(i);/*/* 服務(wù) 的服務(wù) 錄的鏈 字符串并加入 的鏈 列表*/chatRoomList.roomURLListi= tempRecord.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);/*/* 服務(wù) 錄的用自定 的服務(wù) 性并加入 名的列表*/String str =(String)(tempRecord.getAttributeValue(0x1234).getValue(); chatRoomList.append(str, null);chatRoomList.roomNameListi = str; /ServiceSercher.java package common;import javax.microedition.lcdui.Command;1基于J2ME+藍牙技術(shù)的休閑娛樂平臺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 implements CommandListener ./*/* */private int roomStyle ;/*/*用名*/private String userName = null;/*/*娛樂平始的 */private FlatMainMIDlet flatMainMIDlet = null;/*/* 鏈 列表*/public String roomURLList = null;/*/* 名稱列表, 的用妮稱*/public String roomNameList = null;private static final Command cmdBack = new Command(返出,Command.BACK,1);private static final Command cmdOK = new Command(入, Command.OK,1);/* */* 造 * 完成 窗 的初使化* param title* param flatMainMIDlet* param userName*/public RoomList(String title, FlatMainMIDlet flatMainMIDlet,String userName ,String uuidString, int roomStyle).super(title, List.EXCLUSIVE);this.flatMainMIDlet = flatMainMIDlet;this.userName = userName;this.roomStyle = roomStyle;append( 房間中.,null);addCommand(cmdBack);addCommand(cmdOK);1 實現(xiàn)setCommandListener(this);new ServiceSearcher(uuidString,this);private void showRoomClinet(int index).switch(roomStyle).case 1:/*/*雙人個 */flatMainMIDlet.display.setCurrent(new PairChatRoomClient(roomURLListindex,flatMainMIDlet,userName,roomNameListindex);break;case 2:/*/*人 */flatMainMIDlet.display.setCurrent(new MultiChatRoomClient(roomURLListindex,flatMainMIDlet,userName,roomNameListindex);break;case 3:/*/*游戲 */flatMainMIDlet.display.setCurrent(new GameClient(roomURLListindex,flatMainMIDlet);break;public void commandAction(Command command, Displayable displayable) ./*/*入 */if(command=cmdOK).if(roomURLList!=null)./*/* 擇的 的序 */int index = getSelectedIndex();showRoomClinet( index);/*/*返回 菜單*/else if(command=cmdBack)15基于J2ME+藍牙技術(shù)的休閑娛樂平臺.flatMainMIDlet.showFlatMenu();/RoomList.java文件 RoomList 是ServiceSearcher 的使用 。RoomList 是利用ServceSearcher來 服務(wù),并 果顯示出來。 實現(xiàn)chat包中 的命名中,可以看出每個 的功能。這個包中的 是采用fl程的技術(shù),B/S 的 程思想, 平臺的B/S 一樣的,不過利用了JSR82的API,藍牙的服務(wù) 、服務(wù)search 設(shè)備發(fā)現(xiàn) 這 的知識。每臺bluetooth功能的手機藍牙設(shè)備 可以是服務(wù) , 同 身份同 在。每個藍牙設(shè)備 一個SDDB-服務(wù) 錄 ,里 著服務(wù) 錄表,一張表是一些服務(wù)錄 性的,而服務(wù) 錄的的 性是一對值,由服務(wù) 錄ID 服務(wù) 錄值DataElement 組成。服務(wù) 錄表的服務(wù) 錄 性值可 為 ,一是默認的服務(wù) 錄 性,一是用自定 的服務(wù) 錄 性能。每張服務(wù) 錄表對應(yīng)著藍牙設(shè)備所提供的服務(wù),每張一個IDUUID。藍牙設(shè)備提供一個服務(wù)的 候,服務(wù) 錄中會服務(wù) 錄表。如下這 :/*開啟服務(wù)*/server=(StreamConnectionNotifier)Connector.open(btspp:/localhost:22222222222222222222222222222222);當(dāng)藍牙設(shè)備執(zhí)行這 ,會同 在自己的服務(wù) 錄 中增加一個服務(wù) 錄表,表中的IDUUID=22.,表中的那些默認的服務(wù) 錄 性 是自動填 了,如果想增加一些用自定 的服務(wù) 錄 性,可以如下 :/*服務(wù) 服務(wù) 錄*/ServiceRecord record = local.getRecord(server);/*自定 服務(wù) 錄 性*/DataElement elm = null;elm = new DataElement(DataElement.STRING, userName);/請意這上的 userName 這里不能為中文的,所以上登錄的 候不能中文的,這可能是中文 的問題/record.setAttributeValue(0x1234, elm);elm = null;elm = new DataElement(DataElement.STRING, SCHOLAR_II);record.setAttributeValue(0x1235, elm);/*更服務(wù) 錄 性*/local.updateRecord(record);著是藍牙設(shè)備的 , 而 即服務(wù)。JSR82API所提供的機制符向?qū)ο?,?于人的思維 。 服務(wù),向周圍的人咨 是否提供這服務(wù),如果 對 交互, 著 服務(wù)。藍牙設(shè)備想 服務(wù), 所做的工作 是 附近的設(shè)備, 著 問所 的設(shè)備提供哪些服務(wù) 對 的服16 實現(xiàn)務(wù) 錄 ,是否提供自己想 的服務(wù)過UUID來判斷。藍牙設(shè)備服務(wù) 設(shè)置用自 服務(wù) 性 , 那些 性的 ,如下 :/* 服務(wù) 的服務(wù) 錄*/tempRecord = (ServiceRecord)serviceFound.elementAt(i);/* 服務(wù) 的服務(wù) 錄的鏈 字符串并加入 的鏈 列表*/chatRoomList.roomURLListi= tempRecord.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);/* 服務(wù) 錄的用自定 的服務(wù) 性并加入 名的列表*/String str =(String)(tempRecord.getAttributeValue(0x1234).getValue(); chatRoomList.append(str, null);chatRoomList.roomNameListi = str; 服務(wù) 的 ,在fl 的TCP/UDP鏈 。如果想 服務(wù),知IP PORT 可以服務(wù) 必為運行狀態(tài),對應(yīng)于藍牙fifl訊來 , 一個 字符串,藍牙設(shè)備 的設(shè)備發(fā)現(xiàn) 服務(wù) 錄的 的” 果 目的 是用這個 服務(wù) 的 字符串。 字符串之 , 服務(wù) 的 一句 可以完成。/* 服務(wù) */client = (StreamConnection)Connector.open(connectURL);服務(wù) , 同fl 的TCP/UDP訊 一樣了, 入出 , 著 可以 了。之,藍牙設(shè)備提供的服務(wù)是發(fā)生在服務(wù) 錄 中的,為了 藍牙設(shè)備 的咨 ,使藍牙設(shè)備 能 字符串,之 可以 ,行訊了。 藍牙實現(xiàn)藍牙 “如“3-3:“3-3WaitCanvas :調(diào)用paint()畫出等 設(shè)備提示息 GameCanvas :調(diào)用GameCanvas.keyPressed() 處 鍵盤入并實化 繪制GameCanvas 17基于J2ME+藍牙技術(shù)的休閑娛樂平臺ResultCanvas :顯示游戲勝 判定 果 Chess :抽象了盤上是否為服務(wù) 下 BtEngine :抽象了游戲的盤 以及過調(diào)用Connectcontroller 來收發(fā)息 Connectcontroller : 在BtEngine Connectcontroller 之間遞坐標值 服務(wù) 判斷值 EngineObserver :根 服務(wù) 判斷值 啟動服務(wù) 并其坐標遞給Connectcontroller Server : 是 藍牙服務(wù) 并等候服務(wù),并 服務(wù) 的息收發(fā) Client : 設(shè)備 服務(wù),并 的息收發(fā)。MainMenu,入畫 GameCanvas ,再根 啟動服務(wù) 的 擇按鈕再逐次啟動GameCanvas 、BtEngine 、Connectioncontroller 其 擇 的fl程,來完成藍牙的初始化。再由 下,發(fā)送息出去, 立 。由于游戲的循 在BtEngine 中,根 每秒的幀 過調(diào)用GameCanvas 的draw() 一直不 地繪制在繪制 、盤、 擇 。用過GameCanvas 的按鍵響應(yīng)來發(fā)送坐標息給Connectcontroller ,EngineObserver 再過Connectioncontroller 遞給用所 擇的 ,過空中 給對 。對 收下來 ,處 程 是一個對應(yīng)的逆過程。問題 是 持同 。如果是狀態(tài)同 的話, 立一個 于update() 來向其他實告其當(dāng)前狀態(tài),而且 慮發(fā)送失敗的可能。在服務(wù) 之間 立一個容 機制。如果是入同 的話, 充 慮隨機果如對象的 置 位等, 為們不會被入影響。3.4系統(tǒng)測試 :Windows7 Build7100 RCEclipse 3.5 pulsar for Java MESun Wireless Tool Kit 2.5.2 程:在 Eclipse 工 程 的 jad 文 件 中 MicroEdition Configuration 設(shè) 置 為CLDC1.0,Microedition Profile設(shè)置為MIDP2.0, create package包成BtFlat.jar文件 BtFlat.jad文件,慮 入 業(yè)應(yīng)用,所以 。啟動Sun的WTK手機 擬 ,入登錄,對應(yīng)鍵盤 作為F1,F2 別對應(yīng)手機 軟鍵, 向鍵 手機導(dǎo) 鍵對應(yīng),回車鍵對應(yīng)手機菜單Fire鍵。運行程序,入 登錄如“3-4,鍵盤入登錄用名abc,按 軟鍵登錄,入娛樂大 如“3-5。手機1(用名abc) 擇 ,手機2(用名def)擇 ,手機3(用名ghi) 擇加入雙人 , 個 ,如“3-6。擇入abc的 ,手機3 手機1 如“3-7。退出 手機 游戲,手機3加入,雙人游戲?qū)?zhàn)如“3-8。18 實現(xiàn)“3-4 “3-519基于J2ME+藍牙技術(shù)的休閑娛樂平臺“3-6“3-720 實現(xiàn)“3-821基于J2ME+藍牙技術(shù)的休閑娛樂平臺4結(jié)束語基于J2ME的藍牙休閑娛樂平臺開發(fā)設(shè) 實現(xiàn) 的產(chǎn) 文 完成。程序?qū)崿F(xiàn)藍牙的 及游戲?qū)?zhàn)功能, 量2000行 ,共20個文件,目 共58KB,”包為 個文件共97KB, 開發(fā) 個 間。這個平臺可以在任持javaMIDP2.0及藍牙的手機上運行并且行。在開發(fā)這個平臺 間, 過的問題。藍牙目之前 過, 定這個題目 ,開始看 ,這個的過程 了 當(dāng) 間, 是一個的領(lǐng)域,一個的 戰(zhàn), 熟 JSR82包中的API, 文API文 , Sun WTK中附的藍牙demo, 解藍牙基本 程,所以 是 的 一個比大的 難,不過 是 服了這個 難。中 在 設(shè)備 部 行調(diào)的 候,在周圍 臺開了藍牙的手機 , 。是如果周圍三臺 三臺以上手機 開了藍牙, 服務(wù)的 候 不一定能 了 的設(shè)備了,即解決設(shè)備識別的部 fi, 的力量了的解: 識別 個地
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山東勝利職業(yè)學(xué)院單招職業(yè)技能筆試參考題庫帶答案解析
- 2026年沈陽職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題帶答案解析
- 2025年事業(yè)編獸醫(yī)考試題庫及答案
- 2025年縣稅務(wù)局筆試及答案
- 2025年事業(yè)編a類筆試技巧題目及答案
- 汽車機械維修工班組管理知識考核試卷含答案
- 礦山設(shè)備運行協(xié)調(diào)員復(fù)試能力考核試卷含答案
- 未來五年用品產(chǎn)品租賃企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 防疫員誠信道德競賽考核試卷含答案
- 釀酒師操作水平評優(yōu)考核試卷含答案
- 2025年人教版八年級英語上冊各單元詞匯知識點和語法講解與練習(xí)(有答案詳解)
- 道路標識牌監(jiān)理實施細則
- 【《基于杜邦分析的比亞迪公司盈利能力分析》9400字(論文)】
- 智慧林業(yè)云平臺信息化建設(shè)詳細規(guī)劃
- 培養(yǎng)方案修訂情況匯報
- 監(jiān)控綜合維保方案(3篇)
- 犢牛獸醫(yī)工作總結(jié)
- JJF(陜) 125-2025 醫(yī)用移動式 C 形臂 X 射線輻射源校準規(guī)范
- T/CCOA 33-2020平房倉氣密改造操作規(guī)范
- 自行車購車協(xié)議合同
- 2025萍鄉(xiāng)市湘東區(qū)輔警考試試卷真題
評論
0/150
提交評論