J2ME蓝牙连接步骤

客户端:

      首先:初始化蓝牙

      private LocalDevice localDevice; //本地设备实例
      String localBTAddress; //本地蓝牙地址
      String localBTName; //蓝牙名称
      DiscoveryAgent agent; //发现代理

      transIDs = new int[devices.size()]; //保存搜索到的设备ID
      
      try
      {localDevice = LocalDevice.getLocalDevice();//取得本地设备实例
      localBTAddress = localDevice.getBluetoothAddress();//记录蓝牙地址
      localBTName = localDevice.getFriendlyName(); //记录蓝牙名称
      agent = localDevice.getDiscoveryAgent(); //取得蓝牙代理
      } catch(Exception e){
      System.err.println(“初始化蓝牙设备失败: ”+e); }

      其次:利用蓝牙代理搜索设备和服务

      discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this); wait(); //等待synchronized 块

      transIDs[i] = discoveryAgent.searchServices(attrSet, uuids, rd, this); wait();

      实现DiscoveryListener 接口 :

      public void deviceDiscovered() {remoteDevice.getFriendlyName(false);}//发现设备时调用,保存设备名

      public void inquiryCompleted() {synchronized (this) {notify();}} //设备搜索结束时调用,唤醒线程

      public void servicesDiscovered(){vector.addElement(serviceRecord[i]);}//发现服务时调用,保存serviceRecord

      public void serviceSearchCompleted(){synchronized (this) {notify();}} //服务搜索结束时调用,唤醒线程

      第三:与服务器连接(需要服务器创建连接之后才有效)

      String url = serviceRecord.getConnectionURL(int requiredSecurity,boolean mustBeMaster);
      L2CAPConnection con = (L2CAPConnection)Connector.open(url);

     

 

     



服务器端:

      首先:初始化蓝牙(同客户端,只不过多了一条设置服务可发现!)

      private LocalDevice localDevice; //本地设备实例
      String localBTAddress; //本地蓝牙地址
      String localBTName; //蓝牙名称
      DiscoveryAgent agent; //发现代理
      
      try
      {localDevice = LocalDevice.getLocalDevice();//取得本地设备实例
      if(! localDevice.setDiscoverable(DiscoveryAgent.GIAC)){//设置服务器可发现  return false; }
      localBTAddress = localDevice.getBluetoothAddress();//记录蓝牙地址
      localBTName = localDevice.getFriendlyName(); //记录蓝牙名称
      agent = localDevice.getDiscoveryAgent(); //取得蓝牙代理
      } catch(Exception e){
      System.err.println(“初始化蓝牙设备失败: ”+e); }

      其次:创建服务器端连接

      L2CAPConnectionNotifier notifier = (L2CAPConnectionNotifier) Connector.open(localBTAddress);//建立一个连接, 同时创建一个蓝牙服务

      L2CAPConnection con = notifier.acceptAndOpen();//自动将服务注册到蓝牙发现数据库中(SDDB), 之后该服务就可以被客户端搜索了


 

总结步骤:

               ① 服务器和客户端同时初始化(服务器端设置服务发现localDevice.setDiscoverable,客户端需获得发现代理DiscoveryAgent )。

               ②服务器端通过Connector.open(URL【自定义的】) 强制转换成L2CAPConnectionNotifier 或StreamConnectionNotifier 建立一个连接, 同时创建一个蓝牙服务。然后调用acceptAndOpen()方法, 该方法会自动将服务注册到蓝牙发现数据库中(SDDB), 之后该服务就可以被客户端搜索了。——>属于服务器的初始化范围内的

               ③客户端利用蓝牙代理搜索设备和服务,同时用DiscoveryListener 接口获得 RemoteDevice、ServiceRecord实例对象。

               ④客户端再通过Connector.open(URL【通过serviceRecord.getConnectionURL()取得的】)强制转换成L2CAPConnection 或StreamConnection 建立一个连接。

阅读更多
个人分类: 蓝牙
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭