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: