我已经看过很多关于这个特定问题的帖子,所有这些帖子的结果都没有帮助我,或者与我的案例有关。
这是我的问题,我正在尝试设置一个蓝牙微微网,一个节点作为服务器,7个作为客户端,每个都给出一个数字作为位置代表从0开始(服务器)并转到7(客户端)。目前我正试图让它只用于两个设备,服务器和一个客户端。而且我认为它们已经配对了。在下面的代码中,uuid是
private UUID uuid=UUID.fromString("0000111f-0000-1000-8000-00805f9b34fb");
这是我接受传入连接的线程,ad只是蓝牙适配器
private class BTServerThread implements Runnable{
@Override
public void run() {
try {
if (ad != null) {
if (ad.isEnabled()) {
BluetoothServerSocket btss=ad.listenUsingInsecureRfcommWithServiceRecord("MyApp",uuid);
Location=0;
Integer loc=1;
Log.wtf("Server","Searching");
while(loc<=7){
Thread t=new Thread(new BTServerHandler(btss.accept(),loc));
t.start();
Log.wtf("BTS","Found");
loc++;
}
} else {
Log.e("error", "Bluetooth is disabled.");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
这是我的客户端线程试图连接
private class BTClientThread implements Runnable{
@Override
public void run() {
try {
if (ad != null) {
if (ad.isEnabled()) {
Set<BluetoothDevice> bondedDevices = ad.getBondedDevices();
if (bondedDevices.size() > 0) {
Iterator<BluetoothDevice> iter = bondedDevices.iterator();
BluetoothDevice device = iter.next();
Log.wtf("dev", device.getName());
BluetoothSocket clientsocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
clientsocket.connect();
Log.wtf("Connected",device.getName());
}
Log.e("error", "No appropriate paired devices.");
} else {
Log.e("error", "Bluetooth is disabled.");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
屏住呼吸,这里是奇怪的部分,呼叫btss.accept()永远挂起(甚至不返回一次),同时,客户端设备以某种方式连接。当我打电话
BluetoothSocket clientsocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
clientsocket.connect()
这会挂在手机上的吐司上接受说“DeviceName已连接”然后一段时间后它弹出另一个吐司说“DeviceName已断开连接”,没有我做任何事情,同时服务器电话是仍然挂在接受。
这是我的问题,为什么当吐司弹出说连接时它会挂在接受?当另一部手机仍在收听连接时,它怎么可能连接?
感谢您的帮助。
答案 0 :(得分:1)
事实证明,使用那个特定的UUID引起了一些问题,我仍然不明白?在尝试了很多随机的东西后,我终于决定尝试另一个随机的UUID,这神奇地使它起作用。 这是我的新UUID
private UUID uuid = UUID.fromString("56e8a14a-80b3-11e5-8bcf-feff819cdc9f");