Windows 10 で家電を操作する!Nature Remo for UWP アプリを作りました
概要
Nature RemoのAPIを使用したWindows 10 向けのNature Remo for UWP アプリをつくりました。
Micorosoft Storeで公開中です。
Windows10、Xbox One、HoloLensで使用できます。(Fall Creators Update以降必須)
Nature Remo for UWP アプリでできること
- シグナルの送信
- エアコンの操作
- シグナルをスタートメニューピン留め
技術的なことを少し
- C#/XAMLで作成しました。
- 家電やシグナルのアイコンはすべてWindowsの標準フォントを使用しました(Segoe MDL2 AssetsとSegoe UI Symbol)
- Nature RemoのAPIはSwaggerで定義されているのでクライアントコードは自動生成しました。
- 自動生成されたクライアントコードは.NETStandard2.0が必須だっためFall Creators Update以降をサポート対象としました。
- FCUの皮をかぶったWindows 10 Mobileは知らない子です。
過去に買ってきたWindowsモバイルたち
この記事は、Windows 10 Mobile Advent Calendar 2017 の 7 日目の記事です
adventar.org
Windows8が登場したころ、僕はまだWindowsにモバイル端末があることをしりませんでした。
ストアアプリの開発をはじめてからめとべや勉強会を知り、
変態的な愛され方をするWindowsPhoneなるものを見てから興味をもったのが購入のきっかけだったと思います。
Lumia520
初めてのWindowsモバイル、中身はWindow Phone 8
おもちゃとして購入
社会人を始めて間もないころ通勤バスに揺られながらフラッピーバードや2048で暇をつぶしていたものです。
手に持った時のフィット感と手触りが最高でした。
Lumia636
UWP版Sankaの開発で非常にお世話になっている端末
購入当初はWindowsPhone8だった気がしましたが
Windows 10 Mobile 登場時に早々とアップデートすることができ、
SankaをMobileのAU、CUにそれなりに対応できたのはこの子のおかげだったとおもいます。
Mobile上では重くてまともに動かなかったSankaを少しはまともに動かせるようにするのにも大変お世話になりました。
解像度が低いおかげなのか意外とサクサク動いてくれる。
Madosma Q501
開封時に撮った写真
数種の国産WindowsPhoneが登場しようという中、めとべやでひらいさんから開発秘話を聞き、絶対に買うと決めていた端末。
初めて手に持った時の軽さは今後も忘れることはないでしょう。
WinRT版SankaをWindowsPhone移植するのにお世話になりました。
(結局完成しませんでしたが。)
UWP SwipeableSplitViewを作ってみた
SwipeableSplitViewをぐぐるとよさそうなのがでてくるけどもいかんせん転用しづらいため勉強のため車輪してみた。
ページ遷移にもぽさをつけたい pic.twitter.com/fjCRTqsShy
— iku (@ideaki19) 2017年3月5日
作ってみた後にこっちのほうがはるかに使い道が限られているなと思った。(DisplayModeがCompactOverlayじゃないとまともに動かない)
興味あるかた向けにすぐ動くソースを置いておきます。
https://1drv.ms/u/s!AhaSq7vQuLAcidkSnYZ7c4VzJq17ZQ
その他所感
- Styleはほとんどいじらず済んだ(2か所コメントアウト、2か所にManipulatonModeを追加、PaneClipRectangleTransform.TranslateXにBindingを追加)
- Manipulation周りは正直もうさわりたくない
- Style内のTemplateで双方向Bindingはできる
UWP UISettingsを使用する場合の注意点
投稿時点(2017/01/08)の投稿者のWindows 10 SDKの最新バージョンは14393になります。
この記事はUWPデスクトップアプリ向けです。
UISettingsを使用することで、アクセントカラーの取得や変更通知の受け取りができます。
// using Windows.UI.ViewManagement; // sender is UISettings new UISettings().ColorValuesChanged += (sender, e) => Debug.WriteLine(sender.GetColorValue(UIColorType.Accent));
使用する場合はいくつかの注意点があります。
- ColorValuesChanged 通知が2度続けてやってくる(500ms前後の間あり)
- ColorValuesChanged 通知直後にGetColorValue()すると値が正しくない(1~2秒待機する必要がある)
- リリースビルドではUISettingsをAppクラス外でインスタンス化するとコードの実行がスキップされる(?!)
3.の対処は簡単ですAppコンストラクタでUISettingsをインスタンス化してどこかに保持しておけばいいです。
#デバッグビルドではどこでUISettingsをインスタンス化しても問題ない、なぜなのか...
1.も2.もRxを使えばたいしたことないのですが、なぜかリリースビルドでは下記のコードがエラーとなってしまいます。
#Rxの達人でもなければ今回の対処のために初めて実用したレベルなのであきらめ...
Observable.FromEventPattern(UISettings, "ColorValuesChanged") .Throttle(TimeSpan.FromMilliseconds(2000)) .ObserveOn(SynchronizationContext.Current) .Subscribe( _ => { // hoge }); // ↓リリースビルド実行結果↓ // 例外がスローされました: 'System.InvalidOperationException' (System.Reactive.Linq.dll の中) // 型 'System.InvalidOperationException' の例外が System.Reactive.Linq.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした // 追加情報:Could not find event 'ColorValuesChanged' on object of type 'Windows.UI.ViewManagement.UISettings'.
手っ取り早くアクセントカラーの変更監視と取得を行うにはUISettingsしかありません。
できれば使いたくない代物ですが頑張って使うしかないです。
UWP ライブラリを追加したらまずリリースビルドをしましょう
タイトルがすべてです。
※ 以下、2016/05/09時点のお話しです。
たまのリリースビルドで EntityFramework.SqliteのDbContextからエラーが発生
— iku (@ideaki19) 2016年5月9日
原因はWinRTXamlToolkit.UWPをプロジェクトが参照していたから。
アンインストールすることでエラーは出なくなりました。
もともとコンバータを少し使っていただけなので原因の究明はしない...
UWP EntityFramework SQLite DBファイルをデフォルト以外に保存する
ドキュメントによるとデフォルトは下記
ApplicationData.Current.LocalFolder.Path
デフォルト以外に保存する場合は
public class FooBarContext : DbContext { public DbSet<Foo> Foos { get; set; } public DbSet<Bar> Bars { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var connectionString = System.IO.Path.Combine($"Data Source={Windows.Storage.ApplicationData.Current.RoamingFolder.Path}", "FooBar.db"); optionsBuilder.UseSqlite(connectionString); } }