私のコメントには詳しい説明がありますが、何かが間違っていてコメントを編集できないので、答えとして追加します。 私は全く同じ問題を抱えていました。何らかの理由でBLEdeviceをnullとして初期化する必要があります。
private BluetoothLEDevice device = null;
またdiviceがnullの場合にのみ、それを設定するには、if文を使用して、あなたはadvertisementWatcherの上にデバイスを設定し、オーバーしていることを防ぐために、
if (device == null)
{
device = await BluetoothLEDevice.FromBluetoothAddressAsync(eventArgs.BluetoothAddress);
}
または複数のデバイスを設定する場合それらをコレクションに追加し、各デバイスが1度だけ追加されるようにしてください。
これは私の作業コードです:
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher,
BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
BluetoothLEAdvertisementType advertisementType = eventArgs.AdvertisementType;
short rssi = eventArgs.RawSignalStrengthInDBm;
string localName = eventArgs.Advertisement.LocalName;
string manufacturerDataString = "";
var manufacturerSections = eventArgs.Advertisement.ManufacturerData;
if (manufacturerSections.Count > 0)
{
// Only print the first one of the list
var manufacturerData = manufacturerSections[0];
var data = new byte[manufacturerData.Data.Length];
using (var reader = DataReader.FromBuffer(manufacturerData.Data))
{
reader.ReadBytes(data);
}
manufacturerDataString = string.Format("0x{0}: {1}",
manufacturerData.CompanyId.ToString("X"),
BitConverter.ToString(data));
}
string res = string.Format("type={0}, rssi={1}, name={2}, manufacturerData=[{3}]",
advertisementType.ToString(),
rssi.ToString(),
localName,
manufacturerDataString);
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
textBoxWatcher.Text = res;
});
if (device == null)
{
device = await BluetoothLEDevice.FromBluetoothAddressAsync(eventArgs.BluetoothAddress);
if (device != null)
{
var deviceInfo = device.DeviceInformation;
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
if (device.Name != string.Empty)
{
//ResultCollection is a observable observable collection of blueutooth devices
// to bind to a listvieuw,it is not needed!
ResultCollection.Add(new BleDevice(device));
if (deviceInfo.Name == "HMSoft")
{
if (ResultCollection[0] is BleDevice bleDevice)
{
BleDeviceId = bleDevice.Id;
SelectedBleDeviceName = bleDevice.Name;
}
Connect();
}
}
});
}
}
は15063を構築するためのアップグレードは確かに必要不可欠でした。今では、コードが '' BluetoothLEDevice.FromBluetoothAddressAsync''の呼び出しを逃さないという問題があります。 – abinop
私はまったく同じ問題を抱えていました。何らかの理由でBLEdeviceをnullとして初期化する必要があります。 – GrooverFromHolland