Help us understand the problem. What is going on with this article?

[Android][AppCompat]AppCompat22.2.0でv7.NotificationCompatが追加されてMediaStyleが使えるようになっていた

More than 3 years have passed since last update.

Android Support Libraryは最近とても増えていますし、後方互換やらバグ修正が盛んでとっても喜ばしいことと思います。

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ですね。。

MediaSessionCompat.Token

詳しく追えばわかるかと思いますが、きっと難しい事情があるのでしょう。
もしくはv4単体ではもう使って欲しくないのかもしれませんね。
v4に本体を残しているのもMediaStyle使っていない人に置換させる手間をかけさせないためでしょう。

とりあえず、若干もやもやしますが、これからはMediaStyleも後方サポートしつつ簡潔に書けるので普通に使っていきましょう!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away