2016-08-07 5 views
1

.NET WindowsデスクトップアプリケーションからBLE広告コールバックを取得しようとしています。私はAPIに呼び出すことができますが、ReceivedイベントはWPFやコマンドラインアプリケーションのOSから呼び出されることはありません。コードがVS2015のユニットテストまたはユニバーサルWindowsアプリケーションから呼び出されると、イベントが発生します。しかし、私は普遍的なWindowsで利用できない他のことをする必要があります。ここでは、コードは次のようになります。デスクトップ.N​​ETアプリケーションで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からデスクトップコードを呼び出すのは複雑なようです。ありがとう。

答えて

1

これをコンソール.NET 4.6.1アプリで試してみました。広告のコールバックが完了しました。私は少し前にこれのGitHub Sampleを書きました。それは助けになるかもしれません。

  1. します。C:\ Program Files(x86の)\ Windowsのキット\ 10 \ UnionMetadata \ 2つの参照を追加し、

    WinRTのAPIを使用するには:彼らは2つの参照作業WinRTのAPIを取得するための鍵ですWindows.winmd

  2. C:\プログラムファイル(x86の)\リファレンスアセンブリ\マイクロソフト\ Framework.NETCore \ V4.5 \ System.Runtime.WindowsRuntime.dll

2番目の参照が見つからない可能性があります。 4.6.1でv4.5 .NetCoreフレームワークを使用することができました。

+0

ありがとう、カーター、これは役に立ちました。まず、イベントを受け取るのに2番目の参照が厳密には必要ではなく、System.Runtime.WindowsRuntime.dllへの参照をすべて削除したときに、コマンドラインプログラムが機能し始めました。 .dllはIBuffersなどにアクセスするために必要です。私が最初にそれを追加した時、最初はうまくいきませんでした。異なる設定/バージョン(copylocal、v4.5.1など)でエラー(bad image format、ファイルが見つからず、マニフェストと一致しない) 。しかし、私は最終的にあなたが推奨するように動作するようにしました。最初に単体テストでしか働かなかった理由は不明です。 –

関連する問題