我想把所有的蓝牙设备都放在列表中查看这个代码在Java中工作,但是我希望它能被C XXAMARIN帮助吗?

  private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (BluetoothDevice.ACTION_FOUND.equals(action)) {
        // Discovery has found a device. Get the BluetoothDevice
        // object and its info from the Intent.
        BluetoothDevice device =
        intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        String deviceName = device.getName();
        String deviceHardwareAddress = device.getAddress(); // MAC address
    }
}

};

最佳答案

首先,在android设备上获取默认BluetoothAdapter的一个实例,并检查它是否已启用:

BluetoothAdapter adapter = BluetoothAdapter.DefaultAdapter;
if(adapter == null)
    throw new Exception("No Bluetooth adapter found.");

if(!adapter.IsEnabled)
    throw new Exception("Bluetooth adapter is not enabled.");

然后获取一个表示要连接到的物理设备的BluetoothDevice实例。您可以使用适配器的BondedDevices集合获取当前已配对设备的列表。我使用一些简单的LINQ来查找我要查找的设备:
BluetoothDevice device = (from bd in adapter.BondedDevices
                          where bd.Name == "NameOfTheDevice" select bd).FirstOrDefault();

if(device == null)
    throw new Exception("Named device not found.");

最后,使用设备的CreateRfCommSocketToServiceRecord方法,它将返回可用于连接和通信的BluetoothSocket。注意,下面指定的UUIDUUID的标准SPP
_socket = device.CreateRfcommSocketToServiceRecord(UUID.FromString("00001101-0000-1000-8000-00805f9b34fb"));
await _socket.ConnectAsync();

现在设备已连接,通信通过InputStreamOutputStream属性进行,这些属性位于BluetoothSocket对象上。这些属性是标准的.NET流对象,可以完全按照您的预期使用:
// Read data from the device
await _socket.InputStream.ReadAsync(buffer, 0, buffer.Length);

// Write data to the device
await _socket.OutputStream.WriteAsync(buffer, 0, buffer.Length);

09-10 06:58
查看更多