android - 如何在同一个应用程序中连接两个蓝牙 SPP 设备?
问题描述
我想知道,有谁知道如何在同一个应用程序中连接两个蓝牙 SPP 设备?我查看了该BluetoothChat
示例,但是,它没有提供有关如何连接到两个蓝牙 SPP 设备的任何信息。我似乎也无法在其他地方找到太多信息。
解决方案
该线程在我的服务类中。
首先,像这样绑定服务并在服务类中创建一个方法,调用该方法并传递蓝牙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();
}
}
}
与此类似,再创建一个方法和线程类以将两个蓝牙设备保持在已连接状态。我遵循了这一点,它对我来说工作正常。
推荐阅读
- java - 为 java 应用程序指定 server.port 列表
- java - 基于实体删除记录的 JPA 表达式
- vba - 在 MS Access 中,是否可以在查询中添加可更新的空白字段以在 VBA 中以编程方式计算其值?
- javascript - 如何过滤数组并从中替换一些值
- c++ - 似乎无法让我的结构数组正确排序?
- html - iPhone 显示我的 CSS 覆盖在图像上的不同结果
- node-red - 在 Azure 容器实例中运行 Node-Red Docker 容器时如何访问 Node-Red 设置文件
- amazon-ec2 - AWS EC2 Bitnami 服务器中的 SSH 超时
- php - 覆盖先前的输出/缓冲区
- python - `MANIFEST.in` 中的`include a b.txt` 和 `include a/b.txt` 用于包分发的区别?