2012年9月3日月曜日

通知(Notification)

ステータスバーや通知エリアに通知を表示するには、NofiticationクラスとNotificationManagerクラスを使います。


通知(Notification)
以下は、入力したテキストを通知するサンプルプログラムです。

NotificationTest1aActivity.java
package jp.co.triware.samples.NotificationTest1a;

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

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

        final NotificationManager notifMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        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(); // 時刻
                Notification notif = new Notification(icon, tickerText, when);

                // 通知エリアに表示する内容をセット
                String contentTitle = getString(R.string.app_name); // タイトル
                String contentText = etContentText.getText().toString(); // 通知メッセージ
                Intent intent = null; // タップ時の処理(今回は何もしない)
                PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
                notif.setLatestEventInfo(getApplicationContext(), contentTitle, contentText, contentIntent);

                // 通知
                notifMgr.notify(R.string.app_name, notif);
            }
        });
    }
}

20行目のgetSystemService()で通知サービスのインスタンスを取得します。

28~31行目は、ステータスバーや通知エリアに表示する内容(アイコン、ティッカー文字列、通知時刻)を設定します。ティッカー文字列は、通知した際にステータスバーの表示領域に短時間表示される文字列です。

34~38行目で、タイトル(アプリ名称)や通知内容(メッセージ)を設定します。通知エリアに表示される内容です。通知エリアをタップした際に別のアクティビティを呼び出す場合はインテントにセットしますが、今回は何も実行しませんのでintent = nullとします。

41行目のnotify()で通知します。第1引数はIDです。このIDを固定にすることで、通知が複数回行われても、最後のものだけを表示できるようになります。逆に、同じアプリで複数種類の通知を表示させたい場合はIDを変更します。

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プロジェクトの設定
プロジェクト名:NotificationTest1a
アプリケーション名:NotificationTest1a
パッケージ名:jp.co.triware.samples.NotificationTest1a
アクティビティーの作成:NotificationTest1aActivity
ビルドターゲットや最小SDKバージョンは、お使いの開発環境に合わせて設定してください。

実行結果
アプリを起動して、メッセージを入力します。上の入力欄はステータスバーに表示するテキスト、下の入力欄は通知エリアに表示するテキストです。

Notifyボタンをクリックすると、ステータスバーの領域にアイコンとメッセージを表示した後、ステータスバーの表示に戻ります。

ステータスバーを下にドラッグすると、通知エリアが現れます。アイコンとタイトル(アプリ名)、通知内容、通知時刻が表示されています。

0 件のコメント:

コメントを投稿