2010-09-06 88 views
1

我一直在我的蓝牙应用程序上呆了几天。 它的作用是从蓝牙设备接收数据,使用串行端口协议... 该应用程序运行在手机和设备的背景下,当他们需要发送信息时,打开蓝牙并尝试发送数据帧。黑莓蓝牙开发帮助

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


的解决办法是发动AcceptAndOpen() 当蓝牙通话结束...重启功能,但我不能(我只是重新创建所做的端口开放的对象)


我尝试没有成功使用方法: - PushRegistry(“btspp”不兼容) - Connector.open()与客户端的MAC地址(但不是自锁)

如果有人可以 帮助我解决这个问题。因为我已经彻底搜查的黑莓论坛...

谢谢法布里斯

PS:如果你需要的源代码,我可以给你......但我不知道这能帮助你回答我。

回答

0

我只是把周围acceptAndOpen()

while(true) { 
    ... 
} 

现在也没关系。

0

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

0

对不起,我迟到的答案。

我已经创建了一个类: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, ... 
    } 
} 

问候,法布里斯