火山壁紙 - アプリリリース2021年02月09日 08:29


火山壁紙

「火山壁紙」の名称で、ユニバーサルWindowsストアアプリをリリース。気象庁の火山監視カメラの画像を、時折、楽しみに見ているが、いっそ壁紙にできたら、ということで作成してみたもの。気象庁のサイトで提供される画像の解像度は低めなので、少々粗いが、ときに、驚くような絵が得られるので楽しい。

対象の火山は全てでなく、解像度が高めで、空が広いものをピックアップ。メンテナンスで絵がホワイトアウトすることが偶にある。

※アプリのページ

開発時間は、35時間ほど。HttpClientを用いて気象庁のサイトにアクセスし、得られたHTMLから画像のURLを正規表現で抽出し、ダウンロードしたファイルを壁紙に設定する。このため、サイトの仕様変更ですぐに動かなくなるが、ご容赦。

更新間隔を指定しての自動更新は、当初、ThreadPoolTimerを用いていたが、UIを最小化すると止まってしまうので、Background Taskとして実装。時間起動を実現するTimeTriggerは、最小間隔が15分なので、動作確認に時間がかかる。ForegroundとBackgroundの情報のやりとりは、ApplicationData.Current.LocalSettingsを利用。既定の型しか使えないので、ClassのPropertyをバラしてやりとり。

阿蘇山

お薦めの第一は、阿蘇山。今も噴煙を上げ、雄大。東の空で朝日が美しい。

韓国岳

霧島山の韓国岳は、火口を上から見下ろす視点が唯一。

浅間山

東日本では浅間山もなかなか。

富士山

もちろん富士山も。頂上付近の絵なので、雄大さは少々欠けるけども。

UWPでバックグラウンド処理を時間間隔で起動2021年02月09日 11:41

UWPでバックグラウンド処理を用意し、一定時間間隔で起動する手順は、MSやStack Overflowあたりでも、かなり詳しく説明されている。とはいえ、あちこちの情報を整理して実装する必要があるので、備忘までに。

Register

バックグラウンド処理の登録。
・時間間隔起動なのでTimeTriggerの用意。(L.166)
・サイトから画像を取り込むので、インターネットが使えることを条件に設定。(L.171)
・UIが開いているときは、情報を更新する必要があるので、完了時のハンドラを登録。(L.178)
・バックグラウンド処理に渡す情報を、ApplicationData.Current.LocalSettingsを介して渡す。ここでは壁紙に設定する火山のコード。(L.180)

BG Run

バックグラウンド処理の本体。起動するとRunが呼び出される。

OnCompleted

バックグラウンド処理が完了したときに、ハンドラから呼び出される処理。別スレッドにいるので、Dispatcher.RunAsyncで処理。UIを更新。

AppResuming

アプリのUIが最小化されているときは、フォアグランドの処理は中断(Suspend)されているので、上のOnCompletedでは、処理されない。中断が解除されたときにハンドラから呼び出される処理にて、改めてUIを更新。

UpdateUI

UIの更新処理。バックグラウンド処理が更新した情報をApplicationData.Current.LocalSettingsを介して返してもらう。基本的な型しかサポートされていないので、Classの中身をバラして設定。ここでは、ダウンロードして保存した、壁紙に用いる画像ファイルの情報。フォアグラウンドとバックグラウンドでは、同じClassでも異なるobjectになっているので、情報を同期する。