黑莓蓝牙开发帮助

时间:2010-09-06 10:30:18

标签: blackberry bluetooth

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

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


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


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

如果有人可以帮我解决这个问题。因为我在黑莓论坛上彻底搜索过......

谢谢你,Fabrice

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

3 个答案:

答案 0 :(得分:0)

我刚刚放了acceptAndOpen()

while(true) {
    ...
}

现在没关系。

答案 1 :(得分:0)

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

答案 2 :(得分: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, ...
    }
}

此致,Fabrice