Android Wearの通知機能まとめ

[Android Wearのプレビュー版](http://developer.android.com/wear/preview/start.html)がリリースされていたので何ができるのか調べてみました。
※プレビュー版のため、ここに書かれている仕様は将来変更される可能性があります。

# 基本形
Android Wearの通知機能は従来のNotificationに対して上位互換性があり、
アプリ側は特に何もしなくても通知したNotificationがAndroid Wearデバイス上に表示されます。

```java:
NotificationCompat.Builder nb = new NotificationCompat.Builder(this);
nb.setContentTitle("こんちには")
  .setContentText("みさなん おんげき ですか? わしたは げんき です。")
  .setTicker("Ticker")
  .setSubText("サブテキスト")
  .setSmallIcon(R.drawable.ic_stat_device_access_time)
  .setContentIntent(getContentIntent());
```
### 通知バーの表示
![device-2014-03-28-142222.png](https://qiita-image-store.s3.amazonaws.com/0/38581/6435131e-42d0-b1b7-6125-788716aaf063.png)

### Android Wearの表示
![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/38581/1bdff759-5e1c-7e86-0307-02bcbbb44f12.jpeg)

SmallIconは表示されず、代わりにアプリアイコンが表示されるようです。
SubTextやProgressも表示されないようです。

ContentIntentが登録されていると、左右スワイプで下のようなアクションアイコンが出現します。
タップすると登録したPendingIntentが発動します。
![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/38581/806c3614-6a09-41ae-c880-83bd59ee9c45.jpeg)

# 大きいアイコンを表示する
`setLargeIcon`で指定したアイコンがAndroid Wear上では背景画像となります。

```java:
NotificationCompat.Builder nb = new NotificationCompat.Builder(this);
nb.setContentTitle("こんちには")
  .setContentText("みさなん おんげき ですか? わしたは げんき です。")
  .setSmallIcon(R.drawable.ic_stat_device_access_time)
  .setLargeIcon(bitmap)
  .setContentIntent(getContentIntent());
```

![device-2014-03-28-152455.png](https://qiita-image-store.s3.amazonaws.com/0/38581/7aa944d0-edaa-2938-a13b-2621aca95b93.png)
![WS000009.JPG](https://qiita-image-store.s3.amazonaws.com/0/38581/bf6ceffe-4bb6-64b7-83b3-6fcd90b5eceb.jpeg)

# アプリアイコンを非表示にする
`WearableNotifications.Builder`を使うとWear特有の指定を追加できます。
`setHintHideIcon()`を使ってアプリアイコンを非表示にできます。

```java:
NotificationCompat.Builder nb = new NotificationCompat.Builder(this);
nb.setContentTitle("こんちには")
  .setContentText("みさなん おんげき ですか? わしたは げんき です。")
  .setSmallIcon(R.drawable.ic_stat_device_access_time)
  .setContentIntent(getContentIntent());
WearableNotifications.Builder wb = new WearableNotifications.Builder(nb);
wb.setHintHideIcon(true);
```

![WS000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/38581/35b0059d-9f17-ed21-205a-d52906636f4f.jpeg)

# 複数のアクションを追加する
`addAction()`を使うと`setContentIntent()`で指定した以外のアクションを追加することができます。
タップすると引数で指定したPendingIntentが発動します。
追加できるアクションは3個までだそうです。

```java:
NotificationCompat.Builder nb = new NotificationCompat.Builder(this);
nb.setContentTitle("こんちには")
  .setContentText("みさなん おんげき ですか? わしたは げんき です。")
  .setSmallIcon(R.drawable.ic_stat_device_access_time)
  .setContentIntent(getContentIntent())
  .addAction(R.drawable.ic_stat_action_settings, "何かする", getSomeIntent());
```

![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/38581/22eeaa9f-2a4b-05c6-e111-9b6b7ce642b4.jpeg)

# 複数のページを追加する
`WearableNotifications.Builder`の`addPage(Notification)`を使うと複数のページからなる通知を作成できます。
表示するページは左右スワイプで切り替えられます。


```java:
NotificationCompat.Builder nb = new NotificationCompat.Builder(this);
nb.setContentTitle("こんちには")
  .setContentText("みさなん おんげき ですか? わしたは げんき です。")
  .setSmallIcon(R.drawable.ic_stat_device_access_time)
  .setContentIntent(getContentIntent());
WearableNotifications.Builder wb = new WearableNotifications.Builder(nb);
wb.addPage(makeSecondPage());

private Notification makeSecondPage() {
    NotificationCompat.Builder nb = new NotificationCompat.Builder(this);
    nb.setContentTitle("2ページ目のタイトル")
      .setContentText("2ページ目のテキスト")
      .setSmallIcon(R.drawable.ic_stat_device_access_time);
    return nb.build();
}
```

![WS000007.JPG](https://qiita-image-store.s3.amazonaws.com/0/38581/a0bc2828-5878-a644-1e96-ca92374c94d0.jpeg)

### 何ページまで追加できるのか?
試しに10ページ追加したところ全部表示できました。
ただし、インジケータが見切れてよく分からないことになります。
デザインガイドには3ページを限度とするよう書かれています。

![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/38581/c14d81fc-fdc4-b2ba-3385-19a1ecc3e42d.jpeg)

# その他
`setLocalOnly(boolean)`を使うと、通知バーには表示されるがWearデバイス上には表示されないNotificationにすることが可能なようです。
`setGroup(String)`で複数のNotificationをグループ化できるようですが、なぜか動きませんでした。
他にもできることがあるかもしれませんが、よく分からないのでここまで。

# 参考
[Creating Notifications for Android Wear(日本語訳)](http://mantaraw.blogspot.jp/2014/03/creating-notifications-for-android-wear.html)
[Design Principles of Android Wear](http://developer.android.com/wear/design/index.html)