我的蓝牙应用已经好几天了。 它的作用是使用串行端口协议从蓝牙设备接收数据...... 应用程序在手机和设备的后台运行,当他们需要发送信息时,打开蓝牙并尝试发送数据帧。
问题是多个设备可以使用此应用程序进行连接。我无法将手机作为服务器,因此可以接收连续数据。 这意味着我可以使用AcceptAndOpen()创建一个Connector.open(“btspp:localhost:....”),但是这个函数只启动一次,我不能无休止地重新启动。
解决方案是启动AcceptAndOpen() 当蓝牙通话结束时...重新启动该功能,但我不能(我只是重新创建使端口打开的对象)
我尝试使用但没有成功: - PushRegistry(“btspp”不兼容) - Connector.open()与客户端的mac地址(但这不是自我阻塞)
如果有人可以帮我解决这个问题。因为我在黑莓论坛上彻底搜索过......
谢谢你,Fabrice
PS:如果你需要源代码,我可以给你......但我不确定这可以帮助你回答我。答案 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