.NET WindowsデスクトップアプリケーションからBLE広告コールバックを取得しようとしています。私はAPIに呼び出すことができますが、ReceivedイベントはWPFやコマンドラインアプリケーションのOSから呼び出されることはありません。コードがVS2015のユニットテストまたはユニバーサルWindowsアプリケーションから呼び出されると、イベントが発生します。しかし、私は普遍的なWindowsで利用できない他のことをする必要があります。ここでは、コードは次のようになります。デスクトップ.NETアプリケーションでBLE Advertismentコールバックを取得するにはどうすればよいですか?
using Windows.Devices.Bluetooth.Advertisement;
public static void ScanForAdvertisments()
{
mWatcher = new BluetoothLEAdvertisementWatcher();
mWatcher.Received += OnAdvertismentReceived;
mWatcher.ScanningMode = BluetoothLEScanningMode.Active;
mWatcher.Start();
}
public static void OnAdvertismentReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
{
ulong address = args.BluetoothAddress;
short rssi = args.RawSignalStrengthInDBm;
}
- 私はBLE/UWP名前空間を含めるためにWindows.winmdを参照しました。
- 私はフレームワークバージョン4.6.1をWindows 10 Anniversary Editionで使用しています。以前のWindowsビルドと同じ問題がありました。
- UWPアプリを使用して、appxmanifestでブルートゥースのDeviceCapabilityを設定しました。単体テストプロジェクトはこれを必要としていないと思われます。デスクトップアプリケーションにappxmanifestsを適用する方法がわかりません。
- ステータスプロパティはスキャナが実行中であることを報告し、停止したイベントもトリガされません。
とにかく、これはWindowsのバグですか?それを回避する方法はありますか?私はアプリのサービスを調べてみましたが、デスクトップコードをうまく呼び出すように設定されていないようで、UWPからデスクトップコードを呼び出すのは複雑なようです。ありがとう。
ありがとう、カーター、これは役に立ちました。まず、イベントを受け取るのに2番目の参照が厳密には必要ではなく、System.Runtime.WindowsRuntime.dllへの参照をすべて削除したときに、コマンドラインプログラムが機能し始めました。 .dllはIBuffersなどにアクセスするために必要です。私が最初にそれを追加した時、最初はうまくいきませんでした。異なる設定/バージョン(copylocal、v4.5.1など)でエラー(bad image format、ファイルが見つからず、マニフェストと一致しない) 。しかし、私は最終的にあなたが推奨するように動作するようにしました。最初に単体テストでしか働かなかった理由は不明です。 –