「キッズラインのお気に入りシッターさんのスケジュール更新があれば通知を出す」というアプリが欲しかったので、Androidアプリの作り方を学びながら作っていきました。
開発環境
最初は愛着のあるEclipseを使おうとしたのですが、面倒や不具合があるようなので、早々に諦めてAndroidStudioに乗り換えました。
基本知識
ユーザーインタラクションを担当するActivityを実装(ライフサイクルの図参照)して、XMLで書いたLayoutをR.layout.hogeで呼んで書き換えたり、Listenerを設定したりする。別のActivityを起動させる場合(ページ遷移など)はIntentを作ってstartActivity(Intent)。…という程度のことを理解して、とりあえず始めました。
数年前に超初心者向けの本を1冊流し読みした記憶だけを頼りにしたんですが、これから始める人は初心者向けの参考書を買わずともTrainingをやれば良いのではないでしょうか。
つまづいたところ色々
Layoutのプレビューのエラー
SDKのバージョンによってはエラーが出るらしいです。
ネットワークアクセス
ユーザーと直接やり取りするActivityで遅延があるタスクはできないので、AsyncTaskLoaderに処理を書き、結果を使うActivityはLoaderCallbackを実装しました。
AndroidManifest.xmlのユーザーパーミッションに android.permission.INTERNET等を加える必要もあります。
データの保存
SQLiteを使ったのでSQLiteOpenHelperを実装。(参考:Storage Options)
画像も保存したのですが、blob型のカラムにbitmap.getNinePatchChunk()を入れるだけのようです。
画像は外部から取ってきました。HttpUrlConnection GETで取ってきたものをBitmapFactory.decodeStream(InputStream)でBitmapにすれば、ImageViewで表示できます。
定期実行
定期的に更新をチェックして更新があればNotificationを出す、ということをしたかったので、Notificationを出すBroadcastReceiverへの PendingIntent をセットして、AlarmManagerでアラームをセット。
BroadcastReceiver.onReceiveはすぐ終わらないといけないので、更新状況を調べてNotificationを出す処理自体は実際は別のタスクとして記述しました。
なお、StackOverflowの何処かで見たのですが、developer guideのBroadcastsにあるサンプルのようにgoAsyncを使うのはバッドプラクティスとのことです。また、Broadcast intentの受け取りのためのReceiverの登録には色々あり、TICKなどはAndroidManifestのregisterタグに書いていてもダメなようです。(参考)
Card
CardViewのレイアウトを定義しておき、LayoutInflaterを使ってカードを並べたいところに入れました。
Json<->Objectのコンバーター
Androidに関係ない話ですが、kidslineでは、各シッターさんのスケジュール一覧がJSONで取れるので、google/gsonを使いました。app/build.gradleにdependencyを加えればいいの、すごく楽だなと思いました(小並感)。
なお、各シッターさんのURLにあるユーザーIDらしきものと、このスケジュールをリクエストするURLに出てくるIDが違うので、シッターさんページのParserも必要でした。
Toast
ちょこちょことした確認メッセージを出すのにはToast.makeText().show()がかわいくて好きです。(でもよくshow()を忘れる…)
長押しの検出
ロングタップで登録を削除するポップアップを出す、としようと思って調べたのですがGestureDetectorが面倒だったのでやめ。
デバッグ
参考資料
今回はAndroid Developersを見て概要を理解しつつサンプル探しつつだったので書籍なしだったんですが、読んでおくと良い本てどれなんでしょう?
とりあえず、レイアウトを真面目にやるときにはこちらの本を読んでみようかと思っているのですが。
Android Layout Cookbook アプリの価値を高める開発テクニック
- 作者: あんざいゆき
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/03/11
- メディア: 単行本(ソフトカバー)
- 購入: 9人 クリック: 147回
- この商品を含むブログ (33件) を見る
あと、積ん読になる前に下記の2冊は読もうと思っています。
Androidを支える技術〈I〉──60fpsを達成するモダンなGUIシステム (WEB+DB PRESS plus)
- 作者: 有野和真
- 出版社/メーカー: 技術評論社
- 発売日: 2017/02/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Androidを支える技術〈II〉──真のマルチタスクに挑んだモバイルOSの心臓部 (WEB+DB PRESS plus)
- 作者: 有野和真
- 出版社/メーカー: 技術評論社
- 発売日: 2017/03/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る