初めてのAndroidアプリ開発ープログラミングの基本(その3)


東北TECH道場の参加者向けに作成したハンズオンのその2です。
その1はこちら
その2はこちら


睡眠導入アプリのつづき

その2では画像を表示したり音声が再生できるようにしました。
このアプリに機能を追加してみましょう。


睡眠導入アプリに機能を追加する

例えば、眠るまでに何回羊を数えたか残したい。

アプリを使うシチュエーションを考えてみましょう。

このアプリを使う場所は?
⇒ ベッドや布団の上。

アプリを使う状況は?
⇒ 眠れないとき

眠れなくて、羊が一匹、羊が二匹....と数えているうちにいつの間にか寝ている...はず。


ということは...

このアプリで羊が一匹、羊が二匹と数えるということは画面をタップすること。
その後に寝るということは、画面をタップしなくなる。

画面をタップしなくなるということは、通常の設定ならスマートフォンは画面が消えてスリープ状態になる。

眠るまでに何回羊を数えたかを残すには、このスリープ状態に入る時までに何回数えたかを記録すれば良いのではないだろうか?


スリープ状態に入る時ってアプリで検出出来るの?

⇒ 出来ます。
スリープに入る時はActivityのonPause() が呼び出されます。

試してみましょう。
(端末のスリープに入るまでの時間を確認しておきましょう。若しくは端末のスリープボタンを押すことでもOKです)


MyActivity.java に次のコードを追加します

スリープに入る時に呼び出される処理です。

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("onPause", "眠るまでの回数=" + sheepCount);
    }

追加する場所に気をつけましょう。
Activityの { } で囲まれた中で、且つ onCreate() の { } の外です。


自分でもう眠りそうだと思ったらスリープボタンを押す、若しくはいつの間にか寝て画面をタップしなくなったら端末がスリープ状態になり、この onPause() が呼ばれるはずです。


MyActivity.java に次のコードを追加します

スリープから回復してきた時に呼び出される処理です。

    @Override
    protected void onResume() {
        super.onResume();
        textView.setText("前回は" + sheepCount + "回羊を数えました。");
    }

アプリを実行して何回か羊を数えた後にスリープボタンを押してスリープさせて、再びスリープボタンを押して回復した時の表示を確認してみましょう。


ちょっと実験

アプリを一旦終了させて、再び起動します。
次の2つの場合でそれぞれやってみましょう。
- ホームボタンを押した時
- バックボタンを押した時


ホームボタンを押した時は羊を数えた回数が残っていたが、バックボタンを押した時は0に戻っていたのではないでしょうか。


アプリが終了しても値を残すことが出来るようにする方法。

SharedPreferences というクラスを使うと出来ます。


値を保存する:
MyActivity.java に次のコードを追加します。

@Override
    protected void onPause() {
        super.onPause();
        Log.i("onPause", "眠るまでの回数=" + sheepCount);
+        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
+        sp.edit().putInt("SheepCount", sheepCount).commit();
    }


値を読み出す:
MyActivity.java に次のコードを追加します。

    @Override
    protected void onResume() {
        super.onResume();
+        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
+        int count = sp.getInt("SheepCount", -1);
+        if (count >= 0) {
+            textView.setText("前回は" + count + "回羊を数えました。");
+        }
    }

実行して値が残っているか試してみましょう



Androidアプリのライフサイクル