読者です 読者をやめる 読者になる 読者になる

Local Color

六本木でソフトウェアエンジニアをしている母さんのブログですが技術的な話はほとんどありません。本ブログの内容は個人的なものであり、私の所属する企業等の立場、戦略、意見を代表するものではありません。

はじめてのAndroidアプリ

キッズラインのお気に入りシッターさんのスケジュール更新があれば通知を出す」というアプリが欲しかったので、Androidアプリの作り方を学びながら作っていきました。

f:id:ehonyomi:20170402144335p:plain

 

なお、キッズラインさんは今、初回1000円オフのキャンペーンをしていますので、ご興味ある方はどうぞ。

kidsline.me

開発環境

最初は愛着のあるEclipseを使おうとしたのですが、面倒や不具合があるようなので、早々に諦めてAndroidStudioに乗り換えました。

基本知識

ユーザーインタラクションを担当するActivityを実装(ライフサイクルの図参照)して、XMLで書いたLayoutをR.layout.hogeで呼んで書き換えたり、Listenerを設定したりする。別のActivityを起動させる場合(ページ遷移など)はIntentを作ってstartActivity(Intent)。…という程度のことを理解して、とりあえず始めました。

数年前に超初心者向けの本を1冊流し読みした記憶だけを頼りにしたんですが、これから始める人は初心者向けの参考書を買わずともTrainingをやれば良いのではないでしょうか。

つまづいたところ色々

Layoutのプレビューのエラー

SDKのバージョンによってはエラーが出るらしいです。

f:id:ehonyomi:20170402130221p:plain

ネットワークアクセス

ユーザーと直接やり取りする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の便利なデバッグ手法など。

参考資料

今回はAndroid Developersを見て概要を理解しつつサンプル探しつつだったので書籍なしだったんですが、読んでおくと良い本てどれなんでしょう?

とりあえず、レイアウトを真面目にやるときにはこちらの本を読んでみようかと思っているのですが。 

Android Layout Cookbook アプリの価値を高める開発テクニック

Android Layout Cookbook アプリの価値を高める開発テクニック

 

あと、積ん読になる前に下記の2冊は読もうと思っています。

Androidを支える技術〈I〉──60fpsを達成するモダンなGUIシステム (WEB+DB PRESS plus)

Androidを支える技術〈I〉──60fpsを達成するモダンなGUIシステム (WEB+DB PRESS plus)

 
Androidを支える技術〈II〉──真のマルチタスクに挑んだモバイルOSの心臓部 (WEB+DB PRESS plus)

Androidを支える技術〈II〉──真のマルチタスクに挑んだモバイルOSの心臓部 (WEB+DB PRESS plus)