我想知道,是否有人知道如何连接同一个应用程序中的两个蓝牙SPP设备?我查看了BluetoothChat
示例,但是,它没有提供有关如何连接到两个蓝牙SPP设备的任何信息。我似乎无法在其他地方找到太多信息。
答案 0 :(得分:0)
我们假设我们有两个蓝牙设备B和C.要连接它们,我们需要
蓝牙套接字,每个设备一个。
输入和输出流以发送消息。
连接参数:{蓝牙设备(MAC地址),UUID}
要拥有多个连接,我们必须创建专用于连接的这些连接参数。
答案 1 :(得分:0)
此主题位于我的服务类中 首先,绑定服务并在服务类中创建一个这样的方法, 调用此方法并传递蓝牙mac地址。它将在后台连接。对于第二个设备也遵循类似的程序。
public synchronized void connectToDevice(String macAddress){
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(macAddress);
if (mState == STATE_CONNECTING){
if (mConnectThread != null){
mConnectThread.cancel();
mConnectThread = null;
}
}
if (mConnectedThread != null){
mConnectedThread.cancel();
mConnectedThread = null;
}
mConnectThread = new ConnectBtThread(device);
toast("connecting");
mConnectThread.start();
setState(STATE_CONNECTING);
}
这里我创建Thread类来连接并在后台运行
private class ConnectBtThread extends Thread{
private final BluetoothSocket mSocket;
private final BluetoothDevice mDevice;
public ConnectBtThread(BluetoothDevice device){
mDevice = device;
BluetoothSocket socket = null;
try {
socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString(B_UUID));
} catch (IOException e) {
e.printStackTrace();
}
mSocket = socket;
}
@Override
public void run() {
if (mBluetoothAdapter.isDiscovering()){
mBluetoothAdapter.cancelDiscovery();
}
try {
mSocket.connect();
Log.d("service","Bluetooth one running (connected)");
SharedPreferences pre = getSharedPreferences("BT_NAME",0);
pre.edit().putString("bluetooth_connected",mDevice.getName()).apply();
int i = 0;
Log.d("service","one + " +i++);
} catch (IOException e) {
try {
mSocket.close();
Log.d("service","connect thread run method ( close function)");
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
connected(mSocket);
}
public void cancel(){
try {
mSocket.close();
//Toast.makeText(getApplicationContext(),"Failed to connect one",Toast.LENGTH_SHORT).show();
Log.d("service","connect thread cancel method");
} catch (IOException e) {
e.printStackTrace();
}
}
}
与此类似,再创建一个方法和线程类,以使两个蓝牙设备保持连接状态。 我跟着这个,它对我来说很好。