蓝牙:如何连接到任何设备

时间:2015-02-16 16:03:18

标签: android

蓝牙教程我读到所有提到我需要在两侧(服务器和客户端)具有相同的UUID以在两个设备之间建立连接。但是,如果我不知道我的客户的UUID,如果我不在乎呢?

背景资料:我有超过1000个带蓝牙的微控制器。每个微控制器都有一个固定且不可更改的UUID。智能手机应该能够向该微控制器发送字符串消息(单个连接,一个智能手机正在控制一个微控制器)。无论哪个智能手机控制哪个微控制器都无所谓。所以实际上我真的不关心客户的UUID。

所以我的智能手机是服务器,正在为传入的蓝牙连接打开一个监听线程,但我必须在这里输入一个UUID:

tempBluetoothServerSocket = bluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);

但是,当我拥有数千种不同的UUID时,我真的不关心UUID我应该放在哪里?还有BluetoothSocket:

tempBluetoothSocket = this.bluetoothDevice.createRfcommSocketToServiceRecord(MY_UUID);

如何知道哪个UUID?

所以核心问题是:我如何连接到任何微控制器?

1 个答案:

答案 0 :(得分:1)

我一直在用这个:

// Unique UUID for this application
private static final UUID UUID_ANDROID_DEVICE =
        UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
private static final UUID UUID_OTHER_DEVICE =
        UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

它的用途是:

    public AcceptThread(boolean isAndroid) {
        BluetoothServerSocket tmp = null;

        // Create a new listening server socket
        try {
            if(isAndroid)
                tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, UUID_ANDROID_DEVICE);
            else
                tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, UUID_OTHER_DEVICE);
        } catch (IOException e) { }
        mmServerSocket = tmp;
    }

    public ConnectThread(BluetoothDevice device) {
        mmDevice = device;
        BluetoothSocket tmp = null;

        // Get a BluetoothSocket for a connection with the
        // given BluetoothDevice
        try {
            if(BluetoothService.this.isAndroid)
                tmp = device.createRfcommSocketToServiceRecord(UUID_ANDROID_DEVICE);
            else
                tmp = device.createRfcommSocketToServiceRecord(UUID_OTHER_DEVICE);
        } catch (IOException e) { }
        mmSocket = tmp;
    }

这允许我的设备连接到我测试过的任何蓝牙设备。为了测试,它只是变化的蓝牙条码扫描器。虽然我相信这是一个通用的RFCOMM UUID。

它还没有让我失望。