开发语言:C#
源码大小:184KB
本次赞助金额为:9 元
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有编译问题可以找我解决。QQ:78630559
源码大小:184KB
本次赞助金额为:9 元
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有编译问题可以找我解决。QQ:78630559
核心代码
public class BluetoothHepler
{
private BluetoothClient _bluetoothClient;
private BluetoothDeviceInfo _connectedDevice;
private NetworkStream _bluetoothStream;
private Thread _receiveThread;
private bool _isReceiving;
// 事件定义
public event EventHandler<BluetoothDeviceInfo> DeviceDiscovered;
public event EventHandler<bool> ConnectionStatusChanged;
public event EventHandler<byte[]> DataReceived;
public event EventHandler<string> LogMessage;
/// <summary>
/// 是否已连接到蓝牙设备
/// </summary>
public bool IsConnected => _bluetoothClient?.Connected ?? false;
/// <summary>
/// 当前连接的设备
/// </summary>
public BluetoothDeviceInfo ConnectedDevice => _connectedDevice;
public BluetoothHepler()
{
_bluetoothClient = new BluetoothClient();
}
/// <summary>
/// 搜索附近的蓝牙设备
/// </summary>
/// <returns>发现的蓝牙设备列表</returns>
public List<BluetoothDeviceInfo> DiscoverDevices()
{
var devices = new List<BluetoothDeviceInfo>();
try
{
Log("开始搜索蓝牙设备...");
// 开始搜索
var discoveredDevices = _bluetoothClient.DiscoverDevices();
Log($"发现 {discoveredDevices.Count} 个蓝牙设备");
foreach (var device in discoveredDevices)
{
devices.Add(device);
DeviceDiscovered?.Invoke(this, device);
Log($"发现设备: {device.DeviceName} [地址: {device.DeviceAddress}]");
}
}
catch (Exception ex)
{
Log($"搜索蓝牙设备时出错: {ex.Message}");
}
return devices;
}
/// <summary>
/// 连接到指定的蓝牙设备
/// </summary>
/// <param name="device">要连接的蓝牙设备</param>
/// <param name="serviceGuid">服务GUID</param>
/// <returns>是否连接成功</returns>
public bool Connect(BluetoothDeviceInfo device, Guid serviceGuid)
{
if (IsConnected)
{
Disconnect();
}
try
{
Log($"正在连接到设备: {device.DeviceName}...");
// 配对设备(如果需要)
if (!device.Authenticated)
{
Log("设备未配对,尝试配对...");
var isPaired = BluetoothSecurity.PairRequest(device.DeviceAddress, null);
if (!isPaired)
{
Log("配对请求被拒绝或失败");
return false;
}
Log("配对成功");
}
// 连接到设备
_bluetoothClient.Connect(device.DeviceAddress, serviceGuid);
if (_bluetoothClient.Connected)
{
_connectedDevice = device;
_bluetoothStream = _bluetoothClient.GetStream();
// 启动接收线程
_isReceiving = true;
_receiveThread = new Thread(ReceiveData);
_receiveThread.Start();
Log($"已成功连接到设备: {device.DeviceName}");
ConnectionStatusChanged?.Invoke(this, true);
return true;
}
}
catch (Exception ex)
{
Log($"连接蓝牙设备时出错: {ex.Message}");
}
return false;
}
/// <summary>
/// 断开当前蓝牙连接
/// </summary>
public void Disconnect()
{
try
{
if (_bluetoothClient != null && _bluetoothClient.Connected)
{
_isReceiving = false;
_receiveThread?.Join(500); // 等待接收线程结束
_bluetoothStream?.Close();
_bluetoothClient.Close();
Log($"已断开与设备 {_connectedDevice?.DeviceName} 的连接");
ConnectionStatusChanged?.Invoke(this, false);
}
}
catch (Exception ex)
{
Log($"断开蓝牙连接时出错: {ex.Message}");
}
finally
{
_connectedDevice = null;
_bluetoothStream = null;
}
}
/// <summary>
/// 发送数据到已连接的蓝牙设备
/// </summary>
/// <param name="data">要发送的数据</param>
/// <returns>是否发送成功</returns>
public bool SendData(byte[] data)
{
if (!IsConnected || _bluetoothStream == null)
{
Log("未连接到蓝牙设备,无法发送数据");
return false;
}
try
{
_bluetoothStream.Write(data, 0, data.Length);
_bluetoothStream.Flush();
Log($"已发送 {data.Length} 字节数据");
return true;
}
catch (Exception ex)
{
Log($"发送数据时出错: {ex.Message}");
Disconnect();
return false;
}
}
/// <summary>
/// 接收数据的线程方法
/// </summary>
private void ReceiveData()
{
var buffer = new byte[1024];
try
{
while (_isReceiving && _bluetoothClient.Connected && _bluetoothStream != null)
{
// 检查是否有可读数据
if (_bluetoothStream.CanRead && _bluetoothStream.DataAvailable)
{
int bytesRead = _bluetoothStream.Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
var receivedData = new byte[bytesRead];
Array.Copy(buffer, receivedData, bytesRead);
Log($"接收到 {bytesRead} 字节数据");
DataReceived?.Invoke(this, receivedData);
}
}
else
{
Thread.Sleep(100); // 避免CPU占用过高
}
}
}
catch (Exception ex)
{
Log($"接收数据时出错: {ex.Message}");
Disconnect();
}
}
/// <summary>
/// 记录日志消息
/// </summary>
/// <param name="message">日志消息</param>
private void Log(string message)
{
var fullMessage = $"[{DateTime.Now:HH:mm:ss.fff}] {message}";
LogMessage?.Invoke(this, fullMessage);
Console.WriteLine(fullMessage);
}
/// <summary>
/// 释放资源
/// </summary>
public void Dispose()
{
Disconnect();
_bluetoothClient?.Dispose();
_bluetoothClient = null;
}
}视频教程,点击进入B站可以看高清视频
本文来自www.LuoFenMing.com