Android蓝牙连接与断开连接
在Android开发中,我们可以使用Android的蓝牙API来实现与其他设备之间的蓝牙通信。本文将介绍如何在Android应用程序中断开与蓝牙设备的连接。我们将使用Android的BluetoothAdapter和BluetoothDevice类来完成这个任务。
检查设备是否支持蓝牙
在断开蓝牙连接之前,我们首先需要检查设备是否支持蓝牙。可以通过以下代码来检查:
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// 设备不支持蓝牙
return;
}
获取已连接的蓝牙设备
在断开连接之前,我们需要获取当前已连接的蓝牙设备。可以使用BluetoothAdapter的getBondedDevices()方法来获取已配对的蓝牙设备列表。然后,我们可以使用BluetoothDevice的getName()和getAddress()方法来获取设备的名称和地址。
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
String deviceName = device.getName();
String deviceAddress = device.getAddress();
// 处理已连接的设备
}
断开蓝牙连接
要断开蓝牙连接,我们需要通过BluetoothSocket对象与目标设备建立连接。在连接成功后,我们可以使用BluetoothSocket的close()方法来关闭连接。
BluetoothSocket socket = null;
try {
socket = device.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();
// 连接成功,进行通信操作
} catch (IOException e) {
e.printStackTrace();
}
// 关闭连接
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
请注意,在实际使用中,我们需要将上述代码放置在后台线程中执行,以避免在主线程中进行耗时的网络操作。
完整代码示例
下面是一个完整的示例,演示如何断开与蓝牙设备的连接:
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.io.IOException;
import java.util.Set;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "BluetoothExample";
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private BluetoothAdapter bluetoothAdapter;
private BluetoothSocket socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查设备是否支持蓝牙
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
Log.e(TAG, "设备不支持蓝牙");
return;
}
// 获取已连接的蓝牙设备列表
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
String deviceName = device.getName();
String deviceAddress = device.getAddress();
// 处理已连接的设备
}
// 断开蓝牙连接
disconnectBluetooth();
}
private void disconnectBluetooth() {
new Thread(new Runnable() {
@Override
public void run() {
try {
socket = device.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();
// 连接成功,进行通信操作
} catch (IOException e) {
e.printStackTrace();
}
// 关闭连接
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
序列图
下面是一个简单的序列图,展示了Android应用程序与蓝牙设备之间的连接和断开过程。
sequenceDiagram
participant App
participant BluetoothAdapter
participant BluetoothDevice
participant BluetoothSocket
participant TargetDevice
App->>BluetoothAdapter: getDefaultAdapter()
BluetoothAdapter->>App: bluetoothAdapter
App->>BluetoothAdapter: getBondedDevices()
BluetoothAdapter->>App: pairedDevices
App->>BluetoothDevice: getName()
BluetoothDevice->>App: deviceName
App->>BluetoothDevice: getAddress()
BluetoothDevice->>App: