Android 7以降では通知表示の仕様が変わってた

Androidでユーザにボタン付きのNotificationを出す場合、Notification.Builder#addAction() を使って
以下のように指定するが、第1引数で指定するボタンのアイコンリソースが
どうやらAndroid 7(Nougat)以降で表示されなくなっている事に気付く。

private fun makeNotify() {
    val pendingIntent = PendingIntent.getActivity(this, 0, intent, 0)

    val builder = NotificationCompat.Builder(applicationContext).apply {
        setSmallIcon(R.drawable.icon)
        setContentTitle("タイトル")
        setContentText("テキスト")
        setSubText("サブテキスト")
        addAction(R.drawable.icon, "ボタン", pendingIntent);
    }

    NotificationManagerCompat.from(applicationContext).apply {
        notify(0, builder.build())
    }
}

左がAndroid 6、右がAndroid 8系。
よくよく見るとボタンのアイコン以外にもサブテキストの位置とか色々違う。

何でやねんと思ったが、そもそも7系以降の仕様らしい。
ちょっと前に Developers Blog で言及されていたのを今更知る。

News and insights on the Android platform, developer tools, and events.

たぶん代替手段はないし、いろいろ仕様を漁る羽目になったのでリファレンスにも書いといてくれないかな
(後方互換のためにアイコンリソース指定自体はまだ必要)

スポンサーリンク