はじめに
某所にてJavaプログラミングを学んだので、何か対外的にアピールできる成果があればと思い、ある程度実用的なAndroidアプリ開発を行なった。
※内容の不備や著作権上の問題などございましたらコメントなどでご指摘いただけると幸いです。
アプリの目的
春先から日ごとに気温が不安定で、前日と同じような服装でも暑すぎる・寒すぎると感じることが多かった。一方で天気予報を見る習慣はあまりなく、とりわけ忙しい朝に「予報の確認→服装の調整」の流れを毎日実行するのは難しく感じてしまう。
そこで、スマホに毎朝自動で今日の気温と前日比が通知されれば、さすがに服装調整に意識を向けられるのではと考え、初めての開発としてその目的に適うアプリを作成を目指した。
動作の概要
- 設定画面(MainActivity)から都道府県・通知時間を設定
- 都道府県(ListView_PrefSetting)、通知時間(ListView_TimeSetting)はそれぞれListViewより選択
- 設定画面の「開始」ボタンを押すと、WorkManagerにNotificationWorkerが登録され、設定した時間に実行される
-
NotificationWorkerは以下の3つの動作からなる
- 気象庁の全XMLフィードリストより選択地域の「府県天気予報」URLを取得(Stationsetting)→URLに接続し、予想最高・最低気温を取得(ForecastScanner)
- 都道府県名、現在日時より「過去の気象データ」URLを生成し、前日の最高・最低気温を取得(downloadHTML()メソッド)
- 取得した気温から画面を作成し通知を表示(BigTextMainActivity)
クラスの関係性
コード
https://github.com/yamagata1129/FluctuateNotice改善点
- セキュリティや通信状況の確認など接続面の主要な設定がなされていない
- 非推奨のメソッドなどを使用している(onClick(), SharedPreferenceなど)
- delayのあるWorker内での動作(ユーザーから見ればバックグラウンド処理的に振る舞うと認識している)なのでURLからのアクセスをメインスレッド内の処理としているが、適切かどうかわからない
- XMLフィードの取得メソッドが階層を何個も降りるために見た目が汚い
AndroidStudioのバージョン
Android Studio Chipmunk | 2021.2.1
Runtime version: 11.0.12
参考
-
ListViewの作成
https://akira-watson.com/android/listview_1.html -
HTMLパーサ(Jsoup)の使用法
https://jsoup.org/
https://qiita.com/opengl-8080/items/d4864bbc335d1e99a2d7 -
通知の生成
https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ja&authuser=1 -
WorkManagerについて
https://developer.android.com/topic/libraries/architecture/workmanager?hl=ja&authuser=1 -
XMLフィードの取得
https://developer.android.com/training/basics/network-ops/xml?hl=ja -
SharedPreferenceの使用
https://developer.android.com/training/data-storage/shared-preferences?hl=ja&authuser=1