Android Support Libraryは最近とても増えていますし、後方互換やらバグ修正が盛んでとっても喜ばしいことと思います。
特にv4 Support Libraryとか、v7 Support Libraryとか使うと思います。
あとはDesign Support Libraryとか簡単にMaterialデザインにできるので、最近話題になってますよね。
android.support.v4.app.NotificationCompat
自分はNotificationの後方互換でNotificationCompatとか使っていました。
これはBuilder使う書き方だけ実装されてるんですが、バージョンごとにうまいことやってくれるので重宝します。
NotificationCompat(v4)ではNotification.MediaStyleが使えない。。
NotificationCompat.setStyle() can't get Notification.MediaStyle
こちらのスレですね。。
今更、Lollipopで追加されたNotificatio.MediaStyleの実装を使用として、気づいたのですがSupportLibrary22.1.0のNotificationCompat(v4)ではMediaStyleがありませんでした。。
上記のスレは
new NotificationCompat.Builder(this).setStyle(new Notification.MediaStyle()
.setMediaSession(mySession))
これができない!という話です。。
解決策でAnswer1(2014 Oct)で言われてるのは自分でBuilderのCompatコードを書いてV21Builderとそれ以前を分ける、という方法。。
まあ、SupportLibrary自体の実装も同じようなものですし、よくやりますが、面倒なので、やりたくないなーと思ったら、最後の回答(2015 Jun)に
There is no NotificationCompat.MediaStyle in v4 package, however, it does exist in v7 package. Make sure to import:
import android.support.v7.app.NotificationCompat;
instead of the v4 package. It's working for me as of v22.2.0 of the appcompat library.
って書いてあります!
v4だったりv7だったりもはやよくわかりませんが、解決できそうなので最新のv22.2.0にしてみました!
android.support.v7.app.NotificationCompat
これが救世主ですが、NotificationCompatがSupportLibrary v22.2.0ではもう一つ追加されていました!
NotificationCompat
えwって感じですね。
で、肝心の実装内容ですが、、本当にNotificationCompatを拡張してNotificationCompat.MediaStyleを設定できるようにしてあるだけでしたw
Notification noti = new NotificationCompat.Builder()
.setSmallIcon(R.drawable.ic_stat_player)
.setContentTitle("Track title")
.setContentText("Artist - Album")
.setLargeIcon(albumArtBitmap))
.setStyle(new NotificationCompat.MediaStyle()
.setMediaSession(mySession))
.build();
こんな感じで使えます。
v7のパッケージに実装した理由がMediaSessionCompatがv7なのかと思いましたが、v4ですね。。
詳しく追えばわかるかと思いますが、きっと難しい事情があるのでしょう。
もしくはv4単体ではもう使って欲しくないのかもしれませんね。
v4に本体を残しているのもMediaStyle使っていない人に置換させる手間をかけさせないためでしょう。
とりあえず、若干もやもやしますが、これからはMediaStyleも後方サポートしつつ簡潔に書けるので普通に使っていきましょう!