2012年11月7日水曜日

通知(Notification) #7 (プログレスバー)

今回は通知エリアにプログレスバーを表示します。プログレスバーがあると、ユーザーがいつまで待てばいいのかわかりますので有効な方法ですね。

なお、今回のサンプルプログラムはAPI Level 14 (Android 4.0)以降を対象としています。

NotificationTest7aActivity.java
package jp.co.triware.samples.NotificationTest7a;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class NotificationTest7aActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final NotificationManager notifMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        final Notification.Builder notifBuilder = new Notification.Builder(this); // API Level 11
        final EditText etTickerText = (EditText)findViewById(R.id.tickerText_et);
        final EditText etContentText = (EditText)findViewById(R.id.contentText_et);
        Button btnNotify = (Button)findViewById(R.id.notify_btn);
        btnNotify.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                // ステータスバーと通知エリアに表示する内容を取得
                int icon = R.drawable.ic_launcher; // アイコン
                String tickerText = etTickerText.getText().toString(); // テキスト(ステータスバー)
                long when = System.currentTimeMillis(); // 時刻
                String contentTitle = getString(R.string.app_name); // タイトル
                String contentText = etContentText.getText().toString(); // 完了時の通知メッセージ

                // 取得した値をセット
                notifBuilder.setSmallIcon(icon);
                notifBuilder.setTicker(tickerText);
                notifBuilder.setWhen(when);
                notifBuilder.setContentTitle(contentTitle);
                notifBuilder.setContentText(contentText);

                // プログレスバー表示用のスレッド
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // バーの表示
                        for (int i = 0; i <= 100; i ++) {
                            notifBuilder.setProgress(100, i, false); // API Level 14
                            notifMgr.notify(R.string.app_name, notifBuilder.getNotification());
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                ;
                            }
                        }
                        // 完了時の通知
                        notifBuilder.setProgress(0, 0, false); // API Level 14
                        notifMgr.notify(R.string.app_name, notifBuilder.getNotification());
                    }
                }).start();
            }
        });
    }
}

19行目のNotification.BuilderはAndroid 3.0 (API Level 11)で追加されました。また、46行目と55行目のsetProgress()メソッドはAndroid 4.0 (API Level 14)で追加されました。これらを使うために、今回はAndroid 4.0以降を対象としています。

46行目のsetProgress()で、0~100%のプログレスバーを表示します。処理が終わったら、55行目でプログレスバーを消します。

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <EditText
        android:id="@+id/tickerText_et"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Ticker Text"
        />
    <EditText
        android:id="@+id/contentText_et"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Content Text"
        />
    <Button
        android:id="@+id/notify_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Notify"
        />
</LinearLayout>

Androidプロジェクトの設定
プロジェクト名:NotificationTest7a
アプリケーション名:NotificationTest7a
パッケージ名:jp.co.triware.samples.NotificationTest7a
アクティビティーの作成:NotificationTest7aActivity
ビルドターゲットや最小SDKバージョンは、『Android 4.0 (API Level 14)以降』を指定してください。

実行結果

いつものようにテキストを入力してNotifyボタンをクリックします。

ステータスバーにアイコンが表示されたので、、、

通知エリアを開くと、プログレスバーが表示されて、バーが進んでいます。

処理が終わるとプログレスバーが消えました。


今回はAndroid 4.0用のサンプルでしたが、実はそれ以前のバージョンでも実現できます。これについてはまた別の機会にご紹介する予定です。

0 件のコメント:

コメントを投稿