如何实现 Android 扫描蓝牙设备名称

在开发 Android 蓝牙应用的时候,很多新手会遇到扫描不到蓝牙设备名称的问题。本文将逐步指导你完成这个过程,包括详细的代码示例和注释。我们开始于一个清晰的流程图,让你了解每一步的概述。

流程图

classDiagram
    class BluetoothScan {
        +startScan()
        +stopScan()
        +listDevices()
    }
    class BluetoothPermissionsHandler {
        +checkPermissions()
        +requestPermissions()
    }
    class DeviceListAdapter {
        +updateList(devices: List<BluetoothDevice>)
    }

    BluetoothScan --> BluetoothPermissionsHandler : Uses
    BluetoothScan --> DeviceListAdapter : Updates

扫描流程

步骤 描述
1 检查蓝牙权限
2 获取蓝牙适配器
3 开始蓝牙扫描
4 处理扫描结果
5 停止扫描
6 更新 UI

步骤详细说明

1. 检查蓝牙权限

在 Android 中,我们使用 ContextCompatActivityCompat 来检查和请求蓝牙权限。

private void checkBluetoothPermissions() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) 
        != PackageManager.PERMISSION_GRANTED || 
        ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH Admin) 
        != PackageManager.PERMISSION_GRANTED) {
        
        ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN}, 
            1);
    }
}

注释: 这段代码检查是否已获得蓝牙和蓝牙管理员的权限,如果未授予,则请求用户授权。

2. 获取蓝牙适配器

我们需要获取蓝牙适配器以进行设备扫描。

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 蓝牙未支持
    Toast.makeText(this, "蓝牙不支持该设备", Toast.LENGTH_SHORT).show();
}

注释: 此段代码获取默认的蓝牙适配器,如果设备不支持蓝牙,则提示用户。

3. 开始蓝牙扫描

开始扫描蓝牙设备并设置相应的回调。

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // 发现设备
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            String deviceName = device.getName();
            String deviceAddress = device.getAddress();
            // 处理设备信息
        }
    }
};

private void startScan() {
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(receiver, filter);
    bluetoothAdapter.startDiscovery();
}

注释: 这里我们注册一个广播接收器来监听蓝牙设备的发现事件,并开始设备扫描。被发现的设备将通过广播提供相关信息。

4. 处理扫描结果

处理设备信息并更新 UI。

private void handleDeviceFound(BluetoothDevice device) {
    String deviceName = device.getName();
    String deviceAddress = device.getAddress();
    // 更新设备列表
    deviceListAdapter.updateList(deviceName, deviceAddress);
}

注释: 此方法用于处理发现的设备,以提取其名称和地址,并调用适配器更新 UI。

5. 停止扫描

扫描完成后,需要停止扫描以节省电量和资源。

private void stopScan() {
    bluetoothAdapter.cancelDiscovery();
    unregisterReceiver(receiver);
}

注释: 在此方法中,我们取消蓝牙设备的扫描并注销接收器。

6. 更新 UI

使用适配器更新设备列表:

public class DeviceListAdapter extends BaseAdapter {
    private List<BluetoothDevice> devices;

    public void updateList(BluetoothDevice device) {
        devices.add(device);
        notifyDataSetChanged();
    }
}

注释: 设备适配器通过更新设备列表并通知数据改变来刷新 UI。

结论

通过上述步骤,你应该能够实现扫描 Android 蓝牙设备的功能。确保完成所有步骤并仔细检查权限。如果一切设置正确,你将能够成功发现蓝牙设备及其名称。记得在应用上线之前,要做好测试,确保体验良好。如果在开发过程中遇到其他问题,不妨回到这篇文章,逐步检视是否有遗漏的步骤。祝你编程愉快!