2011年5月7日土曜日

カスタムNotification Layoutについて


NotificationにカスタムRemoteViewsをセット

NotificationManagerに登録するオブジェクト・Notificationを次のようにすると、カスタムLayoutを表示することができます。


NotificationManager notificationManager = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon, context.getString(R.string.app_name), 0);
notification.contentView = new RemoteViews(context.getPackageName(),YOUR_CUSTOM_LAYOUT_ID);


下の画像みたいな感じで表示できます。


f:id:baroqueworksdev:20110508020042p:image


各画像からIntentを発行したい

カスタムLayoutが表示できるとなると、次は「各画像をクリックしたら各アプリを起動」したくなります。
RemoteViewsは以下のように各ViewにPendingIntentをセットすることができます。

notification.contentView.setOnClickPendingIntent( VIEW_ID, pendingIntent);


しかし、結論からいうと、FroyoでもGingerBreadでもIntent起動は不可能でした。
(※ただしHTC端末は可能。Android OS 3.0から正式サポートされています)

以下のソースをみれば理解できると思いますが、Intentの発行処理はnotification.contentIntentのみ対象となっています。

\frameworks\base\services\java\com\android\server

  • StatusBarManagerService.java
  • NotificationManagerService.java


Android OS 3.0から正式サポート

各ViewのPendingIntentによる起動がAndroid OS 3.0から正式サポートされています。
デベロッパーサイト Android 3.0 Platform
Support for custom notification layouts to include buttons with PendingIntents, for more interactive notification widgets. For example, a notification can control music playback without starting an activity.


Motorola Xoomで確認すると次のような表示ができました。また、アイコンをクリックするとアプリ起動も可能でした。


f:id:baroqueworksdev:20110508032317p:image

0 件のコメント:

コメントを投稿