一、媒体通知是什么
媒体通知(或称 Media template / Media style)是 Android 标准通知样式的一种,自 API 21(Android 5.0) 引入,方便用户直接控制媒体内容,常见于音乐类、广播类应用。
MIUI 10 完全兼容该通知样式,并调整了视觉风格,以符合系统风格,如下图(第一条通知)。

二、为什么要用系统的媒体通知?
音乐类应用已经都有自己的「自定义通知」可以控制音乐,那为什么还要用系统的媒体通知?
调用系统的媒体通知,系统就能做针对性的优化,如:
- 正在播放的媒体通知默认置顶 + 默认展开为大视图。
- 正在播放的媒体通知默认会出现在锁屏上(置顶+大视图)。
这些都能让内容更充分地曝光,也有利于提升用户体验。

注:不同于原生 Android O 允许所有通知出现在锁屏上,MIOS限制了出现在锁屏的通知类型,以减少用户打扰。如果需要出现在锁屏上,需要前往设置 - 通知与状态栏 - 通知管理,找到对应应用,开启‘’锁屏通知‘’。
三、如何适配系统媒体通知
1、媒体通知的两种视图
媒体通知有两种视图,分别称为:
- 标准视图 / compact view:标准的通知高度,最多显示3个按钮(actions)。
- 大视图 / expanded view:面积更大,最多显示5个按钮。

2、适配媒体通知
MIUI 10的媒体通知,基于 Android O,以下是几个重要的接口:
- setLargeIcon():设置大图,一般为封面图。
- addAction:添加控件,最多5个。
- setShowActionsInCompactView(int):控制在 compact view 显示哪些控件。
- setMediaSession(MediaSession.Token):告知系统正在播放中,系统会将其置顶(若有多条媒体通知的话)
媒体通知代码示例如下:
Notification = new Notification.Builder()
.setContentTitle("Havana(feat.Young Thug")
.setContentText("Camila Cabello - Havana")
.setSmallIcon(mySmallIcon)
.setLargeIcon(album)
.addAction(previousAction)
.addAction(playAction)
.addAction(nextAction)
.addAction(playlistAction)
.addAction(favoriteAction)
.setOngoing(true)
.setStyle(newNotification.MediaStyle()
.setShowActionsInCompactView(1,2,3)
.setMediaSession(mySession)))
.build();
详细接口说明见官方文档:https://developer.android.com/reference/android/app/Notification.MediaStyle。
不过,以下接口在 MIUI 10 无法生效:
以上接口都可能会产生不协调的颜色,故暂时屏蔽。
四、FAQ
1、如何判断系统版本
有以下方法:
android.os.SystemProperties.get("ro.miui.ui.version.code", "7");
// 如果返回值是「8」,就是 MIUI 10
或
android.os.SystemProperties.get("ro.miui.ui.version.name", "");
// 如果返回值是「V10」,就是 MIUI 10
2、只有 MIUI 10 支持媒体通知吗
其实 MIUI 9 也支持媒体通知,但因为没有做好优化。所以,可以大体认为「只有 MIUI 10 支持媒体通知」,含国内版和国际版,且样式和逻辑统一。
3、只要是 MIUI 10 就支持媒体通知吗?
是的。因为 Android 原生从 API 21 (android 5.0)就支持媒体通知了,详见 https://developer.android.com/reference/android/app/Notification.MediaStyle。而 MIUI 10 最低是兼容到 Android 6.0,所以只要是 MIUI 10就支持媒体通知。
4、MIUI 10 会禁用自定义通知吗
不会。但系统无法识别自定义通知的具体内容,只会当成普通通知处理。
5、MIUI 10 媒体通知的样式以后会变化吗
有可能。主要取决于:
- Android 增加新的接口:我们后续会尽力兼容新的接口,并以此调整样式。
- 业务需求和用户反馈。
6、MIUI 以前自己做的锁屏音乐界面还有用吗
在 MIUI 10 上没有用了。由于那个页面的实现方式有较多问题,因此我们在 MIUI 10 上弃用了,改由在锁屏上显示媒体通知,来实现锁屏音乐控制的需求。
7、第三方应用自己做的锁屏页面(如音乐类或运动类的覆盖式)还能用吗?
可以继续使用,MIUI 10 没有限制这个能力(不过前提是开启了「锁屏显示」的权限)。但我们不建议开发者做这么一个覆盖式的页面,因为用户体验很差,还是希望能够用媒体通知替代。
8、如何测试
升级到MIUI 10最新开发版即可
9、如何联系我们
可以邮件给我们的项目组 miuishell@xiaomi.com,会有同事解答相关疑问。