一、媒体通知介绍
媒体通知(或称 Media template / Media style)是 Android 标准通知样式的一种,自 API 21(Android 5.0) 引入,方便用户在通知栏直接控制媒体内容,常见于音乐类、广播类应用。
Xiaomi HyperOS 调整了媒体通知的视觉风格,以符合系统风格,详情如下:
.png)
二、媒体通知适配优势
1. 更高优的曝光位置
正在播放的系统媒体通知默认置顶 + 默认展开为大视图,从而让内容更充分地曝光。
2. 无须用户开启通知权限
接入媒体通知后,当开发者本地推送媒体通知时,不受通知权限影响---即:在用户不开启通知权限时,仍能够发送媒体通知
3. 覆盖更多场景的播放
系统的媒体通知包含音频投射入口,支持将手机音频app的内容投射至音箱、电视、电脑等扬声器设备上。各音频app的用户活跃场景不再局限于手机,用户用音箱等设备听歌时,在符合用户场景要求的情况下,在app后台播放的场景里,也可以保持app活跃
三、如何适配系统媒体通知
适配要点: 请根据google 开发者文档进行适配
https://developer.android.com/about/versions/13/behavior-changes-13?hl=zh-cn
1. Actions的数据来源
参考原生方案 https://developer.android.com/about/versions/13/behavior-changes-13?hl=zh-cn#playback-controls,但是不区分targetSdkVersion,都使用PlaybackState中的Action和CustomeAction。同时系统对显示异常或功能异常的PlaybackState中的CustomAction进行了隐藏。如果应用适配完成CustomeAction后,可联系对接的同事放开展示。
- 若开发者需要自定义功能键,则需使用官方提供的切图,素材如下:
- 名称:媒体通知功能键切图 .zip
- 地址:https://kpan.mioffice.cn/webfolder/ext/YJMLp%24Y%23Ig3%24uVm31GQvyw%40%40?n=0.779459798519182
- 密码:4wID
总之,app 使用系统API 发送媒体通知即可适配系统媒体通知
通知栏适配基本步骤关于自定义Action
// 1 构建MediaSessionCompat
MediaSessionCompat sessionCompat = new MediaSessionCompat();
// 2 构建 playbackStateCompat builder
PlaybackStateCompat.Builder playStateBuilder = new PlaybackStateCompat.Builder()
.setState(PlaybackStateCompat.STATE_NONE, 0, 0f)
.setActions(PlaybackStateCompat.ACTION_PLAY
| PlaybackStateCompat.ACTION_PAUSE
| PlaybackStateCompat.ACTION_PLAY_PAUSE
| PlaybackStateCompat.ACTION_SKIP_TO_NEXT
| PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
| PlaybackStateCompat.ACTION_SEEK_TO
| PlaybackStateCompat.ACTION_SET_RATING
| PlaybackStateCompat.ACTION_FAST_FORWARD
| PlaybackStateCompat.ACTION_REWIND);
// 3 构建自定以action,额外需要携带的参数通过bundle携带
PlaybackStateCompat.CustomAction customAction = new PlaybackStateCompat.CustomAction.Builder().setExtras(new Bundle()).build();
// 4设置自定义action
playStateBuilder.addCustomAction(customAction);
// 5 设置回调接口
sessionCompat.setCallback(new MediaSessionCompat.Callback() {
@Override
public void onCustomAction(String action, Bundle extras) {
super.onCustomAction(action, extras);
// 处理自定义action 点击事件
}
});
// 6设置 playbackstate
sessionCompat.setPlaybackState(playStateBuilder.build());
}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();四、使用规范
1. 内容要求
必须在使用音视频播放服务时,才可发送媒体通知。不允许在用户未主动开启播放时,发送营销类播放推荐内容。
2. 违规处罚
应用发送的媒体通知需遵守以上使用规范和内容原则,如出现违反通知设计规范、内容原则的行为,将被视为违规。违规将先下线该能力,直到符合标准,才重新上线。
五、FAQ
1. 自定义素材是否影响MIUI14及以下版本
暂未发现有影响,但是建议开发者加上相应的MIUI版本的判断:
MIUI系统原先有两个属性可以判断MIUI版本的,HyperOS上这两个属性的值如下:
[ro.miui.ui.version.code], [816]
[ro.miui.ui.version.name], [V816]
在HyperOS上新增加了三个属性,也可以用来判断,如果没有这些属性就是MIUI14或以前的系统,如果有,可以从属性值判断是OS的哪个版本。
[ro.mi.os.version.code], [1]
[ro.mi.os.version.name], [OS1.0] 或者 [OS2.0]
[ro.mi.os.version.incremental], [OS1.0.1.0.TMBCNXM] (示例,实际发布版本上,不同机型的版本数字和后缀字母不一样,但是OS1.0的前缀是固定的)。2. 切图里没有想要的功能键
请通过商务联系我们,并提供所需的功能说明(包含功能名称、功能icon设计图、功能点击的跳转页截图),我们将根据您的需求更新设计