小米开发平台小米妙播适配说明
一、小米妙播背景与介绍
1.1 安卓原生Media Session介绍
Android 框架定义了两个类(媒体会话和媒体控制器),它们为构建媒体播放器应用提供了一个完善的结构。
媒体会话和媒体控制器通过以下方式相互通信:使用与标准播放器操作(播放、暂停、停止等)相对应的预定义回调,以及用于定义应用独有的特殊行为的可扩展自定义调用。
更多信息详见:https://developer.android.com/guide/topics/media-apps/media-apps-overview
1.2 MIUI小米妙播介绍
小米妙播支持基于Media Session的音频播控、基于Wi-Fi的跨设备音乐接力。
用户可以在小米手机和平板的系统控制中心、通知栏/锁屏媒体中心使用该功能。
控制中心内的小米妙播播控,基于安卓原生Media Session能力实现,音频应用适配Media Session即可,众多知名三方应用均已适配。
二、适配小米妙播的好处
2.1 系统全局常驻播控
小米妙播作为控制中心常驻的播控、互联入口,用户可以在手机全局操作音频,是Android厂商中全面媲美苹果 AirPlay2 的系统级功能。
2.2 覆盖更多场景的播放
各音频app的用户活跃场景不再局限于手机,用户用音箱等设备听歌时,也可使用各音频app,通过小米妙播互联播放。
三、适配方式
基本适配方式请参考谷歌官方文档:
https://developer.android.com/guide/topics/media-apps/working-with-a-media-session
https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice
适配要点:
及时更新Meta信息
// 构建MediaSession
MediaSessionCompat mMediaSession;
//构建MediaMetadata,并传入媒体meta信息(歌曲名、专辑名、歌手名、歌曲时长等)
MediaMetadata苹果cms生成双端appCompat.Builder builder = new MediaMetadataCompat.Builder();
builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, getTrackName())
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, getAlbumName())
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, getArtistName())
.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, duration());
MediaMetadataCompat metadata = builder.build();
mMediaSession.setMetadata(metadata);
// 构建并传入歌曲封面
Bitmap result;
// 获取封面BitMap...
builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, result);
mMediaSession.setMetadata(builder.build());
及时更新播放状态信息
// 构建PlaybackState,传入播放状态、播放进度等信息。
PlaybackStateCompat.Builder builder = new PlaybackStateCompat.Builder(getSourcePlaybackState())
.setBufferedPosition(getBufferedPosition())
.setState(PlaybackStateCompat.STATE_PLAYING, position(), getSpeedRatio());
mMediaSession.setPlaybackState(builder.build());
处理播放回调
// 构建MediaSessionCompat.Callback回调,处理播放、暂停、上一首、下一首、调整播放进度等操作
private class MediaPlaybackSessionCallback extends MediaSessionCompat.Callback {
@Override
public void onPlay() {
play();
}
@Override
public void onPause() {
pause();
}
@Override
public void onSkipToNext() {
next();
}
@Override
public void onSkipToPrevious() {
prev();
}
@Override
public void onFastForward() {
forward();
}
@Override
public void onRewind() {
backward();
}
@Override
public void onStop() {
stop();
}
@Override
public void onSeekTo(long pos) {
seek(pos);
}
}
mMediaSession.setCallback(new MediaPlaybackSessionCallback());
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/1252自动生成app0/
部分内容来自网络投稿,如有侵权联系立删