June 26, 2012

Notificationで通知する

Notificationを使って通知する方法です。通常はBackgroundで動作しているServiceからユーザーに何かを通知するのが目的で使います。

通知はTickerと呼ばれる通知時のみ速報のように表示されるテキストメッセージと、通知欄に表示されるアイコン、通知を開いた時に表示されるタイトルとテキスト、通知をタップしたときの動作(Intent)が最小構成となります。

通知は自分で割り振ったID番号で管理することができ、通知ごとに新しい通知を作ることもできれば、通知済みであれば1つの通知に集約して作らないこともできます。基本は集約して同じ通知は1つにまとめるUIが推奨されています。

オプションで通知時にバイブレーション、LED、音楽再生もセットできます。また通知のUIレイアウトもカスタマイズ可能です。

例)通知します。タップすると単独の別Activityを起動します。通知は1つに集約するようにしています。

通知はいろいろな情報をセットしたNotificationを作成し、それをNotificationManagerを使って通知を実行します。IntentはPendingIntentというものに包み込んでセットします。これはそのIntentが自分のアプリが発行したかのように他のアプリから実行することができる特別なIntentになります。NotificationはAPI Level 11から作成方法が異なり、以前はnewしていましたが、今はNotification.Builderを使って作成するため、両方の作り方を記載しています。

ここでは通知の発行は下記の関数を用意しました。

private void showNotification() {
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Intent intent = new Intent(this, SubAppActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    String tickerText = getString(R.string.hello);
    Notification notification;
    try {
        Class.forName("android.app.Notification$Builder");
        notification = new Notification.Builder(this)
        .setContentIntent(contentIntent)
        .setSmallIcon(android.R.drawable.stat_sys_download)
        .setTicker(tickerText)
        .setContentTitle("Title")
        .setContentText("Text")
        .setWhen(System.currentTimeMillis())
        .getNotification();
    } catch (ClassNotFoundException e) {
        notification = new Notification(android.R.drawable.stat_sys_download, tickerText, System.currentTimeMillis());
        notification.setLatestEventInfo(this, "TITLE", "TEXT", contentIntent);
    }
    manager.notify(1, notification);
}

タップされると起動するSubAppActivityは単独のタスクとするため、AndroidManifestで下記のようにActivityを設定します。

<activity
    android:name="SubAppActivity"
    android:launchMode="singleTask"
    android:taskAffinity=""
    android:excludeFromRecents="true">
</activity>

実行すると、まずアイコンとTickerが表示されます。


通知を開くとアイコン、TitleとTextが表示され、タップするとSubAppActivityが独立したタスクで起動します。


参考:Android Developers:Status Notifications

No comments:

Post a Comment