我仍然是编程的初学者。我遇到了我的问题的某些问题,其中pi无法同时使用wifi和蓝牙。这是因为最初没有蓝牙元素的代码可以正常工作。但是当我将蓝牙代码添加到程序中时,它变得很奇怪。它无法通过Wifi从Firebase检索任何数据。确实是他们不能同时一起工作,还是代码错误。是因为套接字流这样吗?非常感谢您的帮助。
链接到代码太长。
答案 0 :(得分:0)
我已经测试了您的代码。该应用程序将收到“访问被拒绝”的异常消息,这将导致该应用程序崩溃。因此,您需要在函数DeviceWatcher_Added
中添加try catch以确保在蓝牙无法连接时应用不会转储。
private async void DeviceWatcher_Added(DeviceWatcher sender, DeviceInformation args)
{
try
{
var device = await BluetoothDevice.FromIdAsync(args.Id);
var services = await device.GetRfcommServicesAsync();
if (services.Services.Count > 0)
{
var service = services.Services[0];
stream = new StreamSocket();
await stream.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);
rx = new DataReader(stream.InputStream);
tx = new DataWriter(stream.OutputStream);
await this.Dispatcher.RunAsync(
Windows.UI.Core.CoreDispatcherPriority.Normal,
() => { Device_9.IsEnabled = true; });
deviceWatcher.Stop();
}
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
顺便说一句,您可以参考我的第一条评论中提到的示例,它显示了如何连接RfcommService与蓝牙进行通信。请注意,在该示例中,服务器通过guid创建RfcommServiceProvider,并且客户端将该服务器与该guid中的RfcommService连接为uuid。
var rfcommServices = await bluetoothDevice.GetRfcommServicesForIdAsync(
RfcommServiceId.FromUuid(Constants.RfcommChatServiceUuid), BluetoothCacheMode.Uncached);