【解決】WPFでUWPでしか利用できないBLE(BluetoothLE)APIを用いGatt通信してみよう。GattDeviceServicesResult

最近WindowsアプリはFormアプリケーションを捨て、WPFで開発することが多いです。しかしEmbedded関係の仕事が多いこともありBluetoothLEを用いるアプリを依頼される事もあります。

 

みなさんWPFやFormアプリケーションでBluetoothLE APIが使えないためにNuGetで「UwpDesktop」をインストールしたりする事が多いと思います。しかし更新されていないプロジェクトですから新しいAPIは使えません。

 

「GattDeviceServicesResult」が使えないんだよ!!と困っている人もよく見かけますよね。“GattDeviceServicesResult” can not be found

 

で、結論がUWPやRT用のAPIなんだから使えなくて当然だよ。ではWPFアプリで途中まで仕上げたのに何してくれてんじゃい!となるわけです。

Microsoftもトピックとして「デスクトップ アプリに利用可能な UWP Api」を紹介していますが、全てのAPIは使えないものの利用できるAPIも多そうです。このリストにないから使えない?とは限りません。

 

 

今回はたまたまstack overflowで見つけた問題を解決してみたいと思います。

【解決方法】※WPFでBLEのGattDeviceServicesResultを使いたい!!

1.まずはプロジェクト全体のバッグアップをとっておいてください。

 

2.プロジェクトをアンロードします。

3.プロジェクトを編集します。

4.TargetPlatformVersionを追記します。

 

5.プロジェクトを再読み込みします。

 

 

6.参照の追加をクリックします。

 

7.参照に対象のWindows.winmdを追加します。

例:Windows 10(10.0.17763.0)を対象とする場合

C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17763.0\Windows.winmd

 

8.参照に対象のSystem.Runtime.WindowsRuntime.dllを追加します。

例:Windows 10(.NETCore V4.5)を対象とする場合

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll

※4.5.1じゃなく4.5です。

Async周りでエラーがまだ出る場合は

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5/System.Runtime.InteropServices.dll

も追加してみてください。

 

9.解決GattDeviceServicesResult使えるようになったでしょう?

 

ね?簡単でしょう。

 

BluetoothLE APIだけでなく色んなものを利用できますよ。応用してみてください。お疲れ様でした。

 

今回の作業で使えるようになったAPI一覧

BluetoothLEDevice(GetGattServicesAsync/ConnectionStatusChanged/FromIdAsync)

GattCharacteristic(ValueChanged/WriteClientCharacteristicConfigurationDescriptorAsync/ReadClientCharacteristicConfigurationDescriptorAsync)

・GattDeviceServicesResult(GetGattServicesAsync/Services)

・GattDeviceService(GetCharacteristicsAsync)

 

 

 

 

 

【解決】Wordで文字入力ができなくなる。キーボードの電池切れじゃない

さて、Windows 10 64bitでマイクロソフト Office 365を利用していますがWordさんがたまにキーボード入力を受け付けてくれなくなります。ワイヤレスキーボードの電池交換をしても改善しない人。そうあなたです。

 

【解決方法】

1.IMEをgoogle IME→Microsoft IMEに切り替えてください。

ね、解決したでしょう。もちろんパソコンの再起動だけでも解決するのですが、都度再起動したくないですからね。

 

【問題】savefiledialog overwriteprompt bug により2回上書き確認が表示されるバグ

この問題はsavefiledialogのoverwritepromptプロパティ(既にファイルがある場合に警告ダイヤログを表示する)に関するバグです。これは開発者側のバグでは無くMicrosoft側のバグです。

環境:Windows 10 Pro 1809

開発環境:Visual Studio 2017( .NET Framework 4.6.2)

簡単な再現サンプルSource code

実際の症状

この問題はWindows 10 の特定のバージョンでのみ発生しているようです。私と同じWindows 10 Pro 1809(2018/10月)であれば必ず再現するでしょう。この問題は2019/1/10時点では解消されていません。

 

2回上書きメッセージが表示されてしまうので、客先に納品しているプログラムで発生した場合だいぶ恥ずかしい症状です。

アップデートを待つか(既に3ヶ月放置されていますが)、savefiledialog のoverwritepromptプロパティ以外で上書き警告を出して回避しましょう。