Quantcast
Channel: kenji matsuokaのニッキ
Viewing all articles
Browse latest Browse all 342

Notificationを積み重ねる

$
0
0
ウェアラブル向けアプリを作る 目次
原文

携帯端末向けのNotificationを作るときはいつでも同種のNotificationを1つのサマリーNotificationにまとめないといけません。例えば、もしあなたのアプリがメッセージ受信のためのNotificationを作るなら、携帯デバイス上では複数のNotificationを表示してはいけません。複数のメッセージを受信した時は、「2件の新着メッセージが有ります」のようにサマリーを提供する1つのNotificationを使います。

しかしながら、Androidウェアラブルではユーザーはそれぞれのメッセージの詳細をウェアラブル上で見ることが出来ず(より詳細を見るためには携帯端末上でアプリを開いてもらう必要がある)、サマリーNotificationでは不便です。
そのため、ウェアラブルデバイス上では全てのNotificactionをスタックにまとめグループ分けします。Notificationのスタックは1つのカードとして表示され、ユーザーはそれを広げて各Notificationごとにわけて詳細を見ることが出来ます。
新しいsetGroup()メソッドにより、携帯デバイス上では1つのサマリーNotificationを提供したまま、これが可能になります。


Groupに各Notificationを追加する

スタックを作るには、スタックに入れたいNotificationごとにsetGroup()を呼びグループキーを指定して、notify()を呼び出しウェアラブルに送ります。

final static String GROUP_KEY_EMAILS = "group_key_emails";

// Notificationを作り適切なグループを設定する
Notification notif = new NotificationCompat.Builder(mContext)
.setContentTitle("New mail from " + sender1)
.setContentText(subject1)
.setSmallIcon(R.drawable.new_mail);
.setGroup(GROUP_KEY_EMAILS)
.build();

// Notificationを発行する
NotificationManagerCompat notificationManager =
NotificationManagerCompat.from(this);
notificationManager.notify(notificationId1, notif);


その後、別のNotificationを作るときに同じグループキーを指定します。notify()を呼びNotificationを表示すると、新しいカードの代わりに、前のNotificationと同じスタック内に表示されます。

Notification notif2 = new NotificationCompat.Builder(mContext)
.setContentTitle("New mail from " + sender2)
.setContentText(subject2)
.setSmallIcon(R.drawable.new_mail);
.setGroup(GROUP_KEY_EMAILS)
.build();

notificationManager.notify(notificationId2, notif2);

標準では、Notificationを追加すると、最も新しいNotificationが先頭に表示されます。setSortKey()を呼ぶことで、並び順を変えることも出来ます。

サマリーNotificationを追加する

携帯デバイスで表示されるサマリーNotificationも提供し続けることが大切です。そこで、各ユニークなNotificationを追加することに加えて、同じスタックグループにサマリーNotificationも加えてサマリーNotificationでsetGroupSummary()を呼びます。

このNotificationはウェアラブル上のNotificationスタックには表示されず、携帯デバイス上でのみ表示されます。


Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_large_icon);

// InboxStyleのnotificationを生成する
Notification summaryNotification = new NotificationCompat.Builder(mContext)
.setContentTitle("2 new messages")
.setSmallIcon(R.drawable.ic_small_icon)
.setLargeIcon(largeIcon)
.setStyle(new NotificationCompat.InboxStyle()
.addLine("Alex Faaborg Check this out")
.addLine("Jeff Chang Launch Party")
.setBigContentTitle("2 new messages")
.setSummaryText("johndoe@gmail.com"))
.setGroup(GROUP_KEY_EMAILS)
.setGroupSummary(true)
.build();

notificationManager.notify(notificationId3, summaryNotification);

このNotificationは簡単な方法でemailやメッセージングアプリ向けのNotificationを作るためにNotificationCompat.InboxStyleを使用しています。
このスタイルを使用するかNotificationCompat,で定義されている別のスタイルを使用するか、サマリーNotificationにスタイルを定義しないことも出来ます。

チップ:上のスクリーンショットようなテキストのスタイルにするために、Styling with HTML markupStyling with Spannablesも見てください。

サマリーNotificationはウェアラブル上に表示されずに影響をあたえることが出来ます。サマリーNotificationを作るときに、NotificationCompat.WearableExtenderクラスを使ってsetBackground()addAction()を呼んでウェアラブル上のスタック全体に背景画像やアクションを設定できます。
Notificationのスタック全体に背景画像をセットする例

Bitmap background = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_background);

NotificationCompat.WearableExtender wearableExtender =
new NotificationCompat.WearableExtender()
.setBackground(background);

// InboxStyle notificationを作る
Notification summaryNotificationWithBackground =
new NotificationCompat.Builder(mContext)
.setContentTitle("2 new messages")
...
.extend(wearableExtender)
.setGroup(GROUP_KEY_EMAILS)
.setGroupSummary(true)
.build();



Except as noted, this content is licensed under Creative Commons Attribution 2.5. For details and restrictions, see the Content License.

Viewing all articles
Browse latest Browse all 342

Trending Articles