Я проверил с вашим кодом. Приложение получит исключение «Доступ запрещен», что приведет к сбою приложения. Поэтому вам нужно добавить try catch в функцию DeviceWatcher_Added
, чтобы приложение не сбрасывало память, когда Bluetooth не мог подключиться.
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 для связи с Bluetooth. Обратите внимание, что в этом примере сервер создает RfcommServiceProvider с помощью guid, и клиент соединяет сервер с RfcommService из этого guid как uuid.
var rfcommServices = await bluetoothDevice.GetRfcommServicesForIdAsync(
RfcommServiceId.FromUuid(Constants.RfcommChatServiceUuid), BluetoothCacheMode.Uncached);