【问题标题】:Blackberry Bluetooth Development Help黑莓蓝牙开发帮助
【发布时间】:2010-09-06 10:30:17
【问题描述】:

我的蓝牙应用程序被卡住了好几天。 它的作用是从蓝牙设备接收数据,使用串行端口协议... 应用程序运行在手机和设备的后台,当需要发送信息时,打开蓝牙并尝试发送数据帧。

问题是多个设备可以使用此应用程序进行连接。而且我没有设法将手机作为服务器,因此它可以接收连续数据。 这意味着我可以用AcceptAndOpen()创建一个Connector.open("btspp: localhost:...."),但是这个函数只启动一次,我不能无休止地重新启动。


解决方案是启动 AcceptAndOpen () 当蓝牙通话结束时...重新启动功能,但我不能(我只是重新创建了使端口打开的对象)


我尝试使用但没有成功: - PushRegistry(“btspp”不兼容) - 带有客户端mac地址的Connector.open()(但这不是自阻塞)

如果有人可以帮助我解决这个问题。因为我在黑莓论坛上搜遍了……

谢谢你,法布里斯

PS:如果你需要源代码,我可以给你……但我不确定这是否能帮助你回答我。

【问题讨论】:

    标签: blackberry bluetooth


    【解决方案1】:

    确保在从 acceptAndOpen 获得连接后,将该连接传递给新线程。这允许当前的“服务器”线程返回并接受另一个连接(假设它处于循环中)。

    【讨论】:

      【解决方案2】:

      对不起,我迟到了。

      我创建了一个类:BluetoothReceiver,它是她在后台启动的 (link text)。 我的部分源代码可以帮助您:

      public void start() {
          try {
          _connector = (StreamConnectionNotifier) Connector.open("btspp://localhost:" + MY_UUID, Connector.READ);
          Runnable r = new Runnable() {
              public void run() {
                  while(true) {
                      try {
                          StreamConnection connection = _connector.acceptAndOpen();
                          onConnectionOpen(connection);
                      }
                      catch (IOException e) {
                          // Connection failed
                          break;
                      }
                  }
              }
          };
          Thread t = new Thread(r);
          t.start();
      }
      catch (IOException e) {
          // e.getMessage()
      }
      
      private void onConnectionOpen(StreamConnection connection) {
          RemoteDevice device = null;
          try {
              device = RemoteDevice.getRemoteDevice(connection);
          } catch (IOException e) {
              // e.getMessage()
          }
          if(device != null) {
              // Make your own process: read, write, pair, ...
          }
      }
      

      问候,法布里斯

      【讨论】:

        【解决方案3】:

        我刚刚放了acceptAndOpen()

        while(true) {
            ...
        }
        

        现在没事了。

        【讨论】: