




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..毕业论文目录1引言12可行性分析13软件需求分析24开发环境35游戏的类结构36各模块的设计56.1主类BTFIRMIDlet类56.2逻辑类BTFIRLogic类的实现76.3游戏画布类BTFIRCanvas的实现106.4连接控制类Connection类136.5服务器类Server类146.6客户端类Client类166.7棋子Dot类的实现207应用程序的安装和部署208结束语20全文共23页7779字移动应用程序蓝牙对战五子棋游戏计算机与信息工程学院xxx班xxx学号:20061521000指导教师xxx副教授摘要信息技术的进步和广泛应用正在深刻地影响着生活中的各个角落。程序的运行环境也不在局限于计算机。本文主要讨论了使用无线开发工具〔WTK在移动这类联网的受限配置设备〔CLDC上开发蓝牙对战五子棋游戏的应用程序〔MIDlet的实现过程。通过该程序的实现,可以了解到基于J2ME开发的基本知识。关键词J2ME;无线通讯工具包〔WTK;联网的受限设备配置<CLDC>;移动;蓝牙应用1引言从1997年的第一款手机游戏《贪吃蛇》到目前,手机游戏已经不在停留在简单的俄罗斯方块之类的画面简单、规则单一的游戏了,而是发展到了可以与电脑相媲美的、具有很强交互性和娱乐性的复杂形式。蓝牙对战五子棋游戏,是一个通过蓝牙作为传输信息的工具,实现对战的游戏开发。该游戏在五子棋单机版的基础上加入了蓝牙联网功能,使具备蓝牙功能的手机可以任意互联,不受到空间和时间的限制进行游戏对战,使游戏更具趣味性。2可行性分析适用于蓝牙无线联网技术的JABWT标准〔JavaAPIsforBluetoothWirelessTechnology,由JSR-82规范所定义,该标准能支持蓝牙应用软件的快速开发,并保证其轻便、安全,以及具有高度的可用性。目前已经有越来越多的设备支持蓝牙程序的运行,因此,移动应用市场也急切需要有更多的此类游戏出现。蓝牙功能除了收发信息和传输文件外,还能用来玩联机游戏,越来越多的手机支持蓝牙功能,可以预见,蓝牙将成为手机的标准功能。蓝牙〔Bluetooth是一种支持设备间短距离通信〔一般10m以内的无线电技术。通过蓝牙,人们能在包括移动、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。可以说,蓝牙为手机对战游戏提供了不错的联网平台,使玩家不再玩单机游戏。目前,大部分的手机都支持Java功能,Java手机游戏很多,但支持蓝牙对战的不多,而且并非所有的Java游戏都能在Java手机上使用,它们之间根据手机品牌和型号不同也有些区别。所以选择Java蓝牙联网游戏时需要认准该游戏是否支持自己的手机。3软件需求分析游戏主要内容为双人联机对战,游戏只支持对战功能,不能进行单机游戏。界面比较简单,但是棋盘大小设计的比较灵活和人性化,可以根据不同手机屏幕自动调整大小。玩家使用四个方向键的上下左右来移动落子的位置,移动到空白位置使用确定按钮来落子。为简单起见,游戏不涉及悔棋,棋盘采用默认尺寸为15*15,并且客户端先下。在游戏逻辑方面没有人工智能,只有"判赢"算法。游戏启动时,MIDlet对象会先显示一个提示界面的闪屏,用户按确定后,显示连接选择表单,提示玩家选择联网类型。在玩家选择本机作为服务器或者客户端之后开始游戏。游戏用户界面示意图如下。客户端客户端服务器游戏画布白方游戏画布黑方开始游戏闪屏确定连接类型选择表单确定←对战→玩家选择4开发环境操作系统:Windowsxp开发环境:JDK-1.6集成开发开发化境:Eclipse客户端类连接控制类继承继承主类画布类客户端类连接控制类继承继承主类画布类逻辑类棋子类ConnectionServerClientBTFIRCanvasBTFIRMIDletBTFIRLogicDotCanvasMIDlet服务器类整个游戏共由7个类组成,如上图所示是游戏的类结构。游戏的BTFIRMIDlet类负责保持display对象,并提供个屏幕的切换。游戏包含3个屏幕:由信息提示框Alert类实现的游戏闪屏欢迎界面;在Form表单上应用ChoiceGroup实现的连接类型选项,连接类型可以是服务器或者客户端;在选定连接类型后进入游戏画布,为了简单起见,默认客户端一方先落子〔黑方。BTFIRCanvas类实现了游戏画布,BTFIRLogic类实现了游戏逻辑,Dot类代表了五子棋的棋子,Connection类用于网络连接和用户界面之间的交互,这样整个程序架构更加清晰。Sever类为服务器端联网程序,负责提供服务,等待其他设备接入,并负责服务器一方落子信息的发送和对方信息的接收;Client类为客户端程序,用于搜索设备,搜索服务,并负责客户端一方棋盘行列信息的发送与接收。各个类之间在程序运行时的组织与联系方式〔以建立的是服务器为例:NNY落子;isMyTurn=false;BTFIRCanvasisMyturn==truekey不做任何操作跟新Logic类;isMyTurn=true;Connection类发送消息;Connection类接收消息;消息接收server<client>Thread.run<>设置本地蓝牙为可被发现模式;开通自己的服务地址<创建服务>;成功则通知connection<connection再通知画布更新信息>;由"服务"接收连接进来的信息<建立Conn>;将连接的流对象conn添加到‘客户处理类’来处理;server中的server中的‘客户处理类’类queue<-conn;run<>{处理queue;}DataOutputStream<dos><-queue.conn;DataInputStream<dis><-queue.conn;read<>;send<>;影响6各模块的设计6.1主类BTFIRMIDlet类AlertAlertChoiceGroupCommandDisplayFormImageBTFIRMIDletPr:alert:AlertPr:choiceType:ChoiceGroupPr:CMD_EXIT:CommandPr:CMD_PLAY:CommandPr:display:DisplayPr:form:FormPr:imgSplash:ImagePr:isServer:BooleanPr:myCanvas:BTFIRCanvasPu:BTFIRMIDlet<>:voidPu:commandAction<>:voidPu:destroyApp<>:voidPu:exit<>:voidPu:startApp<>:voidPu:getDisplayable<>:DisplayableCommandListenerMIDlet<DefaultPackage>BTFIRCanvasDisplayable\Itemjava.ioIOExceptionjava.langStringPr:alert:AlertAlert的实例对象,用于开始时的欢迎画面。Pr:choiceType:ChoiceGroupChoiceGroup的选择组件,用于选择客户端还是服务端。Pr:CMD_EXIT:Command和Pr:CMD_PLAY:CommandCommand的按钮。Pr:display:Display显示控制对象。Pr:form:Form连接类型选择的窗体。Pr:imgSplash:ImageImage的图片对象,用于欢迎界面上的图片。Pr:isServer:Boolean用户选择的的结果存于此布尔变量,服务器为TRUE,客户端为FALSE。Pr:myCanvas:BTFIRCanvas游戏画布实例对象,根据其构造函数传入是服务器还是客户端的信息。Pu:BTFIRMIDlet<>:void本类的构造方法,用于初始化alert和form等信息。Pu:commandAction<Command,Displayable>:void重写事件监听的虚函数,如点击软键CMD_PLAY则显示画布:构造相应画布,显示画布,让画布打开连接,调用画布开局函数对画布初始化创建逻辑;否则退出。Pu:destroyApp<>:void销毁应用程序的固定的需要重写的方法,本程序中无用,不做定义。Pu:exit<>:void人为主动销毁程序的方法。Pu:startApp<>:void启动应用程序的固定的需要重写的方法,调用显示方法显示提示欢迎框,和form。Pu:getDisplayable<>:Displayable返回form对象。6.2逻辑类BTFIRLogic类的实现BTFIRLogic类是五子棋对战游戏的逻辑类,该类创建了棋盘的状态数组,并根据对战双方的落子情况更新该数组。对战双方落子后,BTFIRLogic类也负责检测双方的获胜情况,并通知游戏画布更新用户界面。jjava.langObjectjava.langObjectBTFIRLogicPu:PLAYER_NONE:intPu:PLAYER_BLACK:intPu:PLAYER_WHITE:intPu:boardSize:intPr:isBlack:booleanPr:isBlackWon:booleanPr:isGameOver:booleanPr:lastDot:DotPr:triedDot:DotPr:myCanvas:BTFIRCanvasPr:playerCounter:int[]Pu:BTFIRLogic<>:voidPu:checkGameOver<>:booleanPu:isBlackWon<>:booleanPu:lastDot<>:DotPu:triedDot<>:DotPu:playerBlackGo<>:booleanPu:playerWhiteGo<>:booleanPr:checkFiveInRow<>:intPr:connectedIn1D<>:intPr:connectedIn8D<>:int[]Pr:expendedIn1D<>:intPr:expendedIn8D<>:int[]Pr:goAt<>:voidPr:isGameOver<>:booleanPr:moveOneStep<>:DotPr:table:int[][]<DefaultPackage>BTFIRCanvasDotPu:PLAYER_NONE:int静态常量0表示空白区域Pu:PLAYER_BLACK:int静态常量1表示黑方落子Pu:PLAYER_WHITE:int静态常量2表示白方落子Pu:boardSize:int静态常量15表示棋盘的大小为15Pr:isBlack:boolean是否落子方为黑方标志,在逻辑类构造函数赋值Pr:isBlackWon:boolean是否黑方胜利标志,用于传参Pr:isGameOver:boolean游戏是否结束标志,用于传参Pr:lastDot:Dot最后棋子对象,存放行和列的坐标Pr:triedDot:Dot棋子对象,相当于棋子的bufferPr:myCanvas:BTFIRCanvas游戏画布对象Pr:playerCounter:int[]落子计数器,包括0、1、2分别表示空白区域数量,黑子数量,白子数量Pr:table:int[][]存放棋盘的状态的数组Pu:BTFIRLogic<BTFIRCanvascanvas,booleanisBlack>:void构造函数,与Canvas类建立联系,初始化标志位、计数器和棋盘数组table[][]。Pu:playerBlackGo<introw,col>:boolean黑方落子,调用goAt<row,col,player>落子,落子前首先检测该位置是否为空白区域,并且是否超出棋盘,否则判定为无效落子。落子成功返回的布尔值为真,无效落子返回的布尔值为假,以此作为是否成功落子的判定。落子之后随即检测是否存在"五子连珠"情况〔调用isGameOver<>检查,更新所有状态,标志。Pu:playerWhiteGo<introw,col>:boolean白方落子,同上。以下方法都是服务于以上两个方法的,所以简单介绍。Pr:checkFiveInRow<row,col,n>:int检查某一位置的棋子是否存在五子连珠,存在则返回方向代码,不存在则返回-1。Pr:goAt<>:void在棋盘上落子就是将数组中的相应位置填充为某方的代码,如1、2Pr:isGameOver<>:boolean调用checkFiveInRow<>调用myCanvas.notifyGameEnd<isBlackWon>打印游戏结束;Pr:moveOneStep<Dot,Direct>:Dot在某方向〔8个方向Direct上移动一步,由connectedIn1D<>等同类方法调用。6.3游戏画布类BTFIRCanvas的实现BTFIRCanvasBTFIRCanvasPr:BLACK:intPr:WHITE:intPr:midlet:BTFIRMIDletPr:logic:BTFIRLogicPr:font:FontPr:imgStatus:Image[]Pr:CMD_STOP:CommandPr:connection:ConnectionPr:boardLength:intPr:boardSize:intPr:boardX:intPr:boardY:intPr:canvasWidth:intPr:canvasHeight:intPr:cHeight:intPr:cWidth:intPr:fontHeight:intPr:fontWidth:intPr:gridLength:intPr:stoneLength:intPr:statusColor:intPr:statusImage:intPr:isBlack:booleanPr:isBlackFirst:booleanPr:isColor:booleanPr:isMyTurn:booleanPr:isServer:booleanPr:isUpSide:booleanPu:BTFIRCanvas<>:voidPu:commandAction<>:voidPu:paint<>:voidPro:keyPressed<>:voidPu:repaintAt<>:voidPu:newStage<>:voidPu:notifyGameEnd<>:voidPu:openConnection<>:voidPu:completeInitialization<>:voidPu:receiveMessage<>:voidPu:setStatus<>:voidPr:calcSize<>:voidPr:xByCol<>:voidPr:yByRow<>:voidPr:status:String<DefaultPackage>BTFIRLogicBTFIRMIDletConnectionCommandListenerCanvasCommandFontImagejava.langStringjava.ioIOExceptionPrintStream<DefaultPackage>DotAlertAlertTypeDisplayGraphicsDisplayablejavax.microedition.midletMIDletPr:BLACK:int定义颜色的常量,置值为0,调用时为黑色。Pr:WHITE:int定义颜色的常量,置值为0xffffff,调用时为白色。Pr:midlet:BTFIRMIDlet主类的对象,需要主类传来些主类的参数Pr:logic:BTFIRLogic定义逻辑类的对象,需要调用逻辑类的方法。Pr:font:Font字体对象,字体设置和计算字体大小用到。Pr:imgStatus:Image[]定义图片对象的数组,存放图片。Pr:CMD_STOP:Command按钮的对象,在画布上添加退出按钮。Pr:connection:Connection连接类的对象,创建连接。Pr:boardLength:int棋盘长度。Pr:boardSize:int棋盘大小默认为15*15Pr:boardX:int棋盘左上角的X坐标。Pr:boardY:int棋盘左上角的Y坐标。Pr:canvasWidth:int屏幕宽度。Pr:canvasHeight:int屏幕高度。Pr:cHeight:int棋盘绘制区域的高度Pr:cWidth:int棋盘绘制区域的宽度Pr:fontHeight:int字体高度。Pr:fontWidth:int字体宽度。Pr:gridLength:int棋格长度。Pr:stoneLength:int棋子直径。Pr:statusColor:int提示字符串的颜色。Pr:statusImage:int提示图片的代码。Pr:isBlack:boolean我方是否为黑子,初始值为true。Pr:isColor:boolean手机是否支持颜色的标志Pr:isMyTurn:boolean是否轮到我方落子,初始值为true。Pr:isServer:boolean我方是否为服务器,初始值为true。Pr:isUpSide:boolean提示字符串位置是否在上方。Pu:BTFIRCanvas<BTFIRMIDlet,isServer>:void画布的构造函数,为类结构必须有的函数。主要用于加载游戏资源〔图片、软键,并初始化参数,包括屏幕尺寸、提示字符串的参数,以及我方是否为服务器,默认情况下客户端先落子,而先落子方采用黑色棋子。Pu:commandAction<Command,Displayable>:void由于画布实现了按键监听的接口,所以必须重写此函数。Pu:paint<Graphicsg>:void为画布类结构必须有的函数。在此函数中绘制所有界面。主要画面包括棋盘、棋子和提示字符串。棋盘根据尺寸属性〔calcSize〔方法计算所得的所有尺寸保存在属性里绘制线条并填充棋盘底色,棋子根据BTFIRLogic所保存的棋盘数组中的内容绘制不同颜色的棋子〔1为黑色,2为白色。Pro:keyPressed<intkeyCode>:void为画布类结构必须有的函数。用户界面的输入部分支持键盘输入,键盘的上下左右键能让引导框移动,当玩家按下确定键〔fire后,进行落子,如果落子成功,则发送消息〔connection.sendMessage<>通知对方;如果是无效的落子,则不进行任何操作。Pu:repaintAt<introw,intcol>:void自定义重新绘制函数。当玩家在某个位置落子时,游戏画布并不重新绘制整个屏幕,而是仅仅绘制发生变化的小范围区域,这样能减少整个绘制操作的的工作量,对提高游戏性能有所帮助。根据指定行和列绘制区域。Pu:newStage<>:void游戏新开局时〔BTFIRMIDlet中调用此方法,该方法根据己方落子颜色〔构造时传入创建游戏逻辑对象,并设置游戏中使用的标志位,在默认情况下,客户端先手,并且为黑色棋子。开局时在游戏画布中添加退出软键用于退出游戏。Pu:notifyGameEnd<>:void游戏结束时对画布的修改:设置输赢提示,之后对所有的状态设置进行封锁。Pu:openConnection<>:void创建连接,在其中构造connection对象,并设置是否为服务器。打开连接。Pu:completeInitialization<isBTReady>:void根据参数提示用户,如果连接成功,则提示玩家联网成功,否则连接失败,则跳出提示对话框,并退出程序。isBTReady是在客户和服务端处连接成功的标志的赋值。Pu:receiveMessage<>:void接收对方信息,并处理Canvas。在此方法中由connection获取对方落子行列信息更新游戏逻辑〔logic.playWhiteGo<>,然后将isMyturn设置为true,等待我方落子。isMyturn相当于此方法的一个锁。Pu:setStatus<String,color,image>:void该方法调整状态提示字符串:设置字符串的内容、颜色及相关图片。Pr:calcSize<>:void在绘制屏幕之前,将首先计算屏幕中各个部分的位置和大小。如果屏幕的宽度小于高度,提示字符串位于屏幕上方;反则侧方。在除掉字符串的宽度和高度后,将屏幕剩余部分的宽或高最小值作为棋盘的边长。该方法被newStage方法调用。Pr:xByCol<col>:void返回指定列的x坐标;该方法被calcSize调用。Pr:yByRow<row>:void返回指定行的y坐标;该方法被calcSize调用。Pr:status:String存放状态字符串,设置状态时就将此字符串调用出去。6.4连接控制类Connection类ConnectionPro:server:ServerPro:client:ClientConnectionPro:server:ServerPro:client:ClientPro:isServer:booleanPr:myCanvas:BTFIRCanvasPro:selectedR:intPro:selectedC:intPu:completeInitialization<>:voidPu:Connection<>:voidPu:getSelectedC<>:intPu:getSelectedR<>:intPu:receiveMessage<>:voidPu:sendMessage<>:voidPu:start<>:voidjava.ioObject<DefaultPackage>Client.1java.ioPaintStreamjava.langIntegerStringSystem<DefaultPackage>BTFIRCanvasClientServerPro:server:Server服务器对象Pro:client:Client客户端对象Pro:isServer:boolean是否为服务器标志,由画布传进。Pr:myCanvas:BTFIRCanvas游戏画布,与画布建立联系Pro:selectedR:int传递的行值Pro:selectedC:int传递的列值Pu:completeInitialization<isBTReady>:void客户端或者服务器连接后,又其反馈连接情况,将连接是否成功的信息反馈给Connection类,然后传递给画布告知玩家,这样做的好处是保持各类结构的明确性。该方法由服务器或客户端调用。Pu:Connection<BTFIRMIDlet,isServer>:void构造函数。传递画布,以及设置连接类型。Pu:getSelectedC<>:int获得selectedC信息Pu:getSelectedR<>:int获得selectedR信息Pu:receiveMessage<StringmessageR,messageC>:void由服务器或客户端对象调用,将收到的参数消息传递给Connection对象;然后告知画布接收消息:画布调用getSelectedC<>和getSelectedR<>获取行列信息。Pu:sendMessage<>:void用于发送消息〔己方落子的行列值,如果己方为服务器,则调用服务器对象的sendMessage〔;如果己方为客户端,则调用客户端对象的sendMessage〔。Pu:start<>:void画布调用start<>方法启动连接,如果是服务器,则创建服务器对象并启动服务器连接;如果是客户端,则创建客户端对象并启动客户端连接,根据isSever确定是创建客户端,还是服务器。这样做可以在画布调用时能够统一,使用更简单。6.5服务器类Server类服务器类主要创建蓝牙连接和服务,并等待客户端的连接。创建好连接后进行行列数值的收发。ServerServerPr:accepterThread:ThreadPr:connection:ConnectionPr:connectionURL:StringPr:dos:DataOutputStreamPr:isClosed:booleanPr:local:LocalDevicePr:messageR:StringPr:messageC:StringPr:notifier:StreamConnectionNotifierPr:processor:Server.ClientProcessorPr:queue:VectorPu:run<>:voidPu:sendMessage<>:voidPr:readInputString<>:voidPu:Server<>:voidPu:start<>:voidPr:processConnection<>:voidjava.langObjectRunnablejava.ioDataInputStreamIOExceptionPrintStreamjava.langExceptionSystemjavax.microedition.ioConnectionConnector<DefaultPackage>ConnectionServer.ClientProcessorjava.ioDataOutputStreamjava.langStringThreadjava.utilVectorjavax.bluetoothLocalDevicejavax.microedition.ioStreamConncetionStreamConncetionNotifierPr:accepterThread:Thread线程,在this.start<>中调用并启动。Pr:connection:Connection连接类Pr:connectionURL:String服务器连接地址Pr:dos:DataOutputStream数据输出流Pr:isClosed:boolean连接标志Pr:local:LocalDevice本地设备管理,来自蓝牙包Pr:messageR:String行信息Pr:messageC:String列信息Pr:notifier:StreamConnectionNotifier流连接通告器Pr:processor:Server.ClientProcessor客户端处理Pr:queue:Vector连接队列,可保存对象Pu:Server<Connection>:void构造函数。将Connection与本类中的connection建立联系。获取Connection对象,该类作为一个连接中枢,起到联网和用户界面之间沟通的作用。Pu:run<>:voidServer类实现了Runnable接口,在run<>方法中先获取本地蓝牙管理器,将其设置为允许其他设备访问,然后按照指定服务地址开通服务并等待客户端的联入。Pu:sendMessage<Stringmessage1,message2>:void发送数据。Server类收发的数据位玩家落子的行列信息,这些信息已经被Connection类转化为字符串形式。发送信息既往数据输出流〔DataOutputStream中写入数据。Pr:readInputString<StreamConnection>:void接收数据。被内部客户端处理类调用,接收信息则从数据输入流中读取数据,并传递给Connection连接类。Pu:start<>:void线程的创建和启动。Pr:processConnection<>:void在线程中调用了ClientProcessor类的processConnection<>方法,该方法打开了连接的数据输出流以便数据发送。调用了Server的readInputString。在Server中使用了内部类ClientProcessor用来处理客户端,该类也实现并启动了一个线程,为的是随时等待加入的客户端;在构造函数中创建并启动该类的线程;在run<>方法中等待客户端的连接,在获得客户端后,尝试开启数据流。本类主要围绕run<>展开,依次经行获取蓝牙管理,设置访问权限,开通指定地址的服务,接受连接,在客户连接处理类中添加连接并唤醒处理线程。这时数据流赋值给dos,再由收发数据方法处理。6.6客户端类Client类Client类主要负责搜索设备和服务,并负责客户端的信息收发。Client类引用了较多蓝牙API,并且实现了Runnable和DiscoveryListener接口。javajavax.bluetoothBluetoothStateExceptionLocalDeviceDeviceClassRemoteDeviceServiceRecordjavax.microedition.ioConnectionConnectorClientpro:conn:StreamConnectionpro:devices:Vectorpro:i:intpro:messageR:Stringpro:messageC:Stringpro:recordsVectorpro:transIDs:int[]Pr:connection:ConnectionPr:discoveryAgent:DiscoveryAgentPr:discType:intPr:ECHO_SERVER_UUID:UUIDPr:isClosed:booleanPr:processorThread:ThreadPu:Client:voidPu:deviceDiscovered:voidPu:inquiryCompleted<>:voidPu:run<>:voidPu:sendMessage<>:voidPu:servicesDiscovered<>:voidPu:serviceSearchCompleted<>:voidPu:start<>:void<DefaultPackeage>Client.1Connectionjava.langObjectRunnablejavax.bluetoothjavax.bluetoothDiscoveryListenerjava.ioDataInputStreamPrintStreamDataOutputStreamjava.langExceptionSystemInterruptedExceptionThrowablejavax.microedition.ioStreamConnectionjavax.bluetoothDiscoveryAgentUUIDjava.utilVectorjava.langStringThreadpro:conn:StreamConnection连接流对象pro:devices:Vector向量容器devices存放所有搜索到的设备。pro:i:intpro:messageR:String发出的行信息pro:messageC:String发出的列信息pro:recordsVector服务集合。将搜索到的集合加入服务集合。pro:transIDs:int[]服务搜索的事务id集合。Pr:connection:Connection连接对象,在构造函数中赋值。Pr:discoveryAgent:DiscoveryAgent发现代理类的对象,用于发现代理。Pr:discType:int参数,返回类型。Pr:ECHO_SERVER_UUID:UUID响应服务的UUID〔对象Pr:isClosed:boolean连接关闭标志位。Pr:processorThread:Thread线程对象,此线程把整个Client作为线程来运行〔run<>。Pu:Client<Connection>:void获取连接类对象。在连接类中创建的Client对象就会和连接类建立联系。搜索设备客户端程序使用蓝牙发现API以搜索在其附近的的设备和服务。服务代理类〔DiscoveryAgent同时支持设备与服务的发现。当设备和服务被发现时,想得到通知的客户端应用程序必须实现并注册DiscoveryListener接口,这个接口定义了设备发现通知和服务发现通知的回调〔discType。使用DiscoveryAgent类,用于搜索设备的相关方法来开始和取消设备发现:.retrieveDevices<>,重新获得已经发现或者附近的已知设备。.startInquiry<>,启动发现附近设备,也叫inquiry。.cancelInquiry<>,取消当前进行的任何请求。"蓝牙发现代理"在请求阶段的不同时候会分别调用DiscoveryListener〔发现监听器不同的回调方法:.deviceDiscovered<>,指出是否有设备被发现。.inquiryCompleted<>,指出是否请求已经成功、触发一个错误或已被取消。设备发现以调用startInquiry<>函数开始。在请求进行时,"蓝牙发现代理"会在适当的时候调用回调方法deviceDiscovered<>和inquiryCompleted<>,此两个方法均为虚函数,需要重写。Pu:deviceDiscovered<RemoteDevice,DeviceClass>:void将搜索到的远程设备添加到设备集合中。第一个参数即为搜索到的远程设备〔RemoteDevice。Pu:inquiryCompleted<intdiscType>:void获取返回状态,如果搜索结束但未查找到远程设备,或者搜索过程中发生异常的处理在此函数中进行。在这里将异常通知连接类的completeInitialization<boolean>。搜索服务可以使用"发现代理"〔DiscoveryAgent的服务发现方法来开始或取消服务发现:.selectService<>,启动服务发现搜索。〔根据API手册应为尝试定位一个服务。.searchServices<>,启动服务发现搜索。本程序用此方法。.cancelServiceSearch<>,取消正在进行中的任何服务发现搜索操作。DiscoveryAgent类在服务发现阶段的不同时候会分别调用DiscoveryListener〔发现监听器的服务发现回调方法:Pu:servicesDiscovered<inttransID,ServerRecord[]serverRecord>:void表示是否服务已被发现。将serverRecord集合赋值给records容器。Pu:serviceSearchCompleted<inttransID,intrespCode>:void表示服务发现是否已经完成。主要对respCode进行操作。为简单起见,本程序不做任何事。Pu:run<>:voidClient类实现了Runnable接口,线程将完成搜索设备和服务工作,并记录所搜索到的服务id。此方法中主要完成三个阶段:1、获取本地设备和获取代理,2、搜索设备,3、搜索服务。Pu:sendMessage<Stringmessage1,message2>:void为了简单起见,将消息的收发处理放在一个方法中,客户端发送消息之后就立即接收信息,并传递给Connection〔receiveMessage类。在此方法中直接定义一个线程,让线
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心脑血管病健康管理课件
- 2025年高质量轿车用深冲钢板合作协议书
- 出口木箱采购协议书范本
- 拆墙房东同意协议书范本
- 饭店用品置换协议书范本
- 工地安全移交协议书范本
- 委托支付房租协议书范本
- 立秋的课件教学课件
- 小米返厂维修协议书范本
- 花卉销售订购协议书范本
- T/CASTEM 1014-2023科技成果转化风险评估指南
- 2025CSCO小细胞肺癌诊疗指南解读
- 患者十大安全目标(2025) 2
- 矿产资源“三率”指标要求第15部分:地热、矿泉水
- 电工技术基础 教案 第2章 直流电路
- 2025-2030中国无人零售自助终端设备行业市场发展分析及竞争格局与投资战略研究报告
- 2025-2030板材项目商业计划书
- 2025-2030全球及中国球形氧化铝行业市场现状供需分析及投资评估规划分析研究报告
- 2025年知识产权代理公司业务流程优化策略
- DB11∕T1481-2024生产经营单位生产安全事故应急预案评审规范
- 机房安全用电知识培训
评论
0/150
提交评论