學海拾遺

          生活、技術、思想無處不在學習
          posts - 52, comments - 23, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          棧初始化
          在你做任何事之前,你需要初始化你的棧。記住,棧是一個用來控制你的藍牙設

          備的軟件或固件。棧初始化由一系列工作組成,但是它的最主要目的是獲得準備

          無線通信的藍牙設備。不同的廠商處理不同的初始化工作,所以我們將用Atinav

          JAVA Bluetooth SDK來適用如何初始化一個棧。

          import javax.bluetooth.*;
          import javax.microedition.io.*;
          import com.atinav.BCC;

          public class WirelessDevice implements DiscoveryListener {
              LocalDevice localDevice = null;
             
              public WirelessDevice (){
                  //setting the port number using Atinav's BCC
                  BCC.setPortName("COM1");
                 
                  //setting the baud rate using Atinav's BCC
                  BCC.setBaudRate(57600);
                 
                  //connectable mode using Atinav's BCC
                  BCC.setConnectable(true);
                 
                  //Set discoverable mode using Atinav's BCC
                  BCC.setDiscoverable(DiscoveryAgent.GIAC);
                 
                  try{
                      localDevice = LocalDevice.getLoaclDevice();
                  }
                  catch (BluetoothStateException exp) {
                  }
                 
                  // implementation of methods in DiscoveryListener class
                  // of javax.bluetooth goes here
                 
                  // now do some work
              }
          }

          設備管理
          LocalDevice類
          RemoteDevice類
          JAVA Bluetooth標準中讓你用來進行設備管理的兩個主類,可查詢一些你的本地

          藍牙設備和區域內設備的靜態信息。
          靜態方法getLocalDevice(),返回一個供你使用的LocalDevice實例對象
          LocalDevice對象上的getBluetoothAddress(),獲得你的藍牙無線裝置的唯一地


          LocalDevice對象上的靜態方法setDiscoverable(),設備允許其它的藍牙設備發

          現到該設備

          當獲得一個LocalDevice對象后,調用LocalDeevice.getDiscoveryAgent()實例化

          一個DiscoveryAgent對象。
          首先,本地對象實現DiscoveryListener接口;為了我啟動發現進程,調用你的Di

          scoveryAgent對象的startInquiry()方法,此方法為非阻塞式的,所以你能夠去

          干其它的事情,一邊等待其它的藍牙設備被發現。
          當藍牙設備被發現后,JVM會調用實現DiscoveryListener接口類的deviceDiscove

          red()方法,此方法會傳遞給你一個代表被查詢的設備的RemoteDevice對象

          服務發現
          DiscoveryAgent類的searchServices()方法允許你搜索RemoteDevice對象上的服

          務。當服務查找到,而且你的對象實現了DiscoveryListener接口,JVM會調用ser

          vicesDiscovered()方法。此回調方法也會傳入屬于你查找到的服務的一個Servic

          eRecord對象。當創建了ServiceRecord對象后,將其連接至RemoteDevice。
          String connectionURL = servRecord[i].getConnectionURL(0, false);

          服務注冊Service Registration
          當一個藍牙客戶端設備能夠在一個藍牙服務器設備用服務發現之前,藍牙服務器

          需要在服務發現數據庫中(Service Discovery database, SDDB)中注冊它的服務

          數據庫中,此過程叫做服務注冊。這一節將討論一個藍牙設備服務注冊包括一些

          什么,同時我也會給出一個需要完成這項工作的類綱要。
          注意:在點對點的應用中,比如一個文件傳輸或聊天應用,記住任何設備都是客

          戶端或服務器,為了處理同時為服務發現和服務注冊的情況,因此你需要將這些

          功能(包括客戶端和服務器)合并入你的程序中。下面是一個包含了獲得你注冊

          的服務和存入SDDB中的情景。
          1、調用Connector.open()并將Connection的結果放入到一個StreamConnectionNo

          tifier對象。一個Connector.open()創建一個ServiceRecord并設定一些屬性;
          2、用LocalDevice對象和StreamConnectionNotifier來獲得系統創建的ServiceRe

          cord;
          3、在ServiceRecord中增加或修改屬性;[可選]
          4、用StreamConnectionNotifier調用acceptAndOpen()方法,并等待藍牙客戶端

          發現并連接服務;
           a、系統在SDDB中創建一個服務記錄。
          5、等待直到一個客戶端連接;
          6、當服務器端準備退出,在StreamConnectionNotifier上調用close()
           a、系統移除SDDB中的服務記錄
          StreamConnectNotifier和Connector都來自于J2ME平臺的javax.microedition.io

          包中。完成上面任務的代碼片斷顯示如下:
          // lets name our variables
          StreamConnectionNotifier notifier = null;
          StreamConnection sconn = null;
          LocalDevice localdevice = null;
          ServiceRecord servicerecord = null;

          // step #1
          // the String url will already be defined with the
          // correct url parameters
          notifier = (StreamConnectionNotifier)Connector.open(url);

          // step #2
          // we will get the LocalDevice if not already done so
          localdevice = LocalDevice.getLocalDevice();
          servicerecord = localdevice.getRecord(notifier);

          // step #3 is optional

          // step #4
          // this step will block the current thread until
          // a client responds this step will also cause the
          // service record to be stored in the SDDB
          notifier.acceptAndOpen();

          // step #5
          // just wait...
          // assume the client has connected and you are ready to exit

          // step #6
          // this causes the service record to be removed
          // from the SDDB
          notifier.close();
          你需要在藍牙里面做的服務發現如上,下一步是通信

          通信
          藍牙是一個通信協議,因此你將如何與它通信呢?JAVA Bluetooth API給你三種方法來發送和接收數據。但為立刻起見,我們實現其中的一個:RFCOMM
          注意:RFCOMM是用來通信的串行端口操作模式的協議層,但是這兩個東西經常被當作同樣來使用。

          [未完...]


          [Original Text]:http://today.java.net/pub/a/today/2004/07/27/bluetooth.html
          主站蜘蛛池模板: 河东区| 清徐县| 宁强县| 景谷| 萍乡市| 大同市| 卢氏县| 雅安市| 怀安县| 容城县| 安溪县| 汪清县| 石台县| 分宜县| 榆树市| 双辽市| 延安市| 洪江市| 哈尔滨市| 廉江市| 额济纳旗| 阿克陶县| 宁陵县| 古浪县| 天峨县| 福建省| 乌鲁木齐县| 宿松县| 东乡族自治县| 呈贡县| 台中市| 阿拉善左旗| 博兴县| 项城市| 滨州市| 沁阳市| 昌图县| 杭锦后旗| 上饶县| 郎溪县| 磴口县|