-
Notifications
You must be signed in to change notification settings - Fork 104
使用说明
1.在 build.gradle 中添加依赖。
implementation 'com.kunminx.player:player:4.1.0'
提示:本库托管于 Maven Central,请自行在根目录 build.gradle 添加 mavenCentral()
。
2.依据默认专辑实体类 DefaultAlbum
结构准备一串数据。此处以 JSON 为例:
// DefaultAlbum 包含 DefaultMusic 和 DefaultArtist 两个子类:
// 三者的字段可详见 BaseAlbumItem、BaseMusicItem 和 BaseArtistItem。
{
"albumId": "JAY_008",
"title": "依然范特西",
"summary": "Still Fantasy",
"artist": {
"name": "Jay"
},
"coverImg": "https://...57036-570ed96eb055ef17.png",
"musics": [
{
"musicId": "JAY_008_001",
"title": "本草纲目",
"artist": {
"name": "Jay"
},
"coverImg": "https://.../57036-570ed96eb055ef17.png",
"url": "bencaogangmu.mp3"
},
...
]
}
3.在 Application 中初始化 多媒体播放控制组件。
DefaultPlayerManager.getInstance().init(this);
4.在得到数据后,最少只需一行代码 即可完成数据的装载。
//一行代码完成数据的初始化。
DefaultPlayerManager.getInstance().loadAlbum(album);
温馨提示:
1.实际开发中,项目数据或与本库数据 “结构上存在差异”,故通常做法是,从后端拿到和解析项目 JSON 数据,并对该数据进行遍历。在遍历过程中,实例化并装载 “本库实体类对象” 到列表中,以获本库所能使用的列表数据。(具体可参见 CustomJsonSampleFragment 示例)
2.注意:如后端直接使用本库实体类读写 JSON 数据,请在 ProGuard Rules 中为该实体类配置混淆白名单:
-keep class com.kunminx.player.bean.** {*;}
5.在 “视图控制器” 中发送请求,并接收来自 Dispatcher 统一分发结果响应。
5.1.在 “视图控制器” 任意处发送请求,例如此处请求 “播放下一首”
DefaultPlayerManager.getInstance().playNext();
5.2.在 “视图控制器” 订阅通知处,收听来自 Dispatcher 推送结果响应。
PlayerManager.getInstance().getDispatcher().output(this, playerEvent -> {
switch (playerEvent.eventId) {
case PlayerEvent.EVENT_CHANGE_MUSIC:
mStates.title.set(playerEvent.changeMusic.getTitle());
mStates.artist.set(playerEvent.changeMusic.getSummary());
mStates.coverImg.set(playerEvent.changeMusic.getImg());
break;
case PlayerEvent.EVENT_PROGRESS:
mStates.maxSeekDuration.set(playerEvent.playingMusic.getDuration());
mStates.currentSeekPosition.set(playerEvent.playingMusic.getPlayerPosition());
break;
case PlayerEvent.EVENT_PLAY_STATUS:
mStates.isPlaying.set(!playerEvent.toPause);
break;
case PlayerEvent.EVENT_REPEAT_MODE:
Enum<PlayingInfoManager.RepeatMode> mode = playerEvent.repeatMode;
mStates.playModeIcon.set(PlayerManager.getInstance().getModeIcon(mode));
break;
}
});
注意:如使用 JSON,请在 ProGuard Rules 中为该实体类目录配置混淆白名单:
-keep class com.kunminx.player.bean.** {*;}
该库为 Album、Music、Artist 分别准备了基础实体类,定制实体类时,即是去继承、拓展 并取代 这些实体类。
关于个性化配置,具体可以参考我在 TestAlbum
、 PlayerManager
和 PlayerFragment
等类中编写的案例:
你需要根据需求,在 BaseAlbumItem
等实体类的基础上进行扩展,具体的办法是,编写一个实体类,该实体类须继承于 BaseAlbumItem
;该实体类中的两个内部类也须分别继承于 BaseMusicItem
和 BaseArtistItem
。
以 TestAlbum 实体类为例,扩充 albumMid
三个字段:
public class TestAlbum extends BaseAlbumItem<TestAlbum.TestMusic, TestAlbum.TestArtist> {
private String albumMid;
public String getAlbumMid() { return albumMid; }
public void setAlbumMid(String albumMid) { this.albumMid = albumMid; }
public static class TestMusic extends BaseMusicItem<TestArtist> {
private String songMid;
public String getSongMid() { return songMid; }
public void setSongMid(String songMid) { this.songMid = songMid; }
}
public static class TestArtist extends BaseArtistItem {
private String birthday;
public String getBirthday() { return birthday; }
public void setBirthday(String birthday) { this.birthday = birthday; }
}
}
注意:如使用 JSON,请在 ProGuard Rules 中为该实体类配置混淆白名单。
在装载数据和实现自定义配置时,泛型框中须指明你编写的实体类。
具体可参考 PlayerManager
类,该单例的存在就是为了指定你自己定义的实体类,否则你大可直接使用 DefaultPlayerManager
。
public class PlayerManager implements IPlayController<TestAlbum, TestAlbum.TestMusic> {
private static PlayerManager sManager = new PlayerManager();
private PlayerController<TestAlbum, TestAlbum.TestMusic> mController;
private Context mContext;
private PlayerManager() {
mController = new PlayerController<>();
}
public static PlayerManager getInstance() {
return sManager;
}
@Override
public void init(Context context) {
mContext = context.getApplicationContext();
mController.init(mContext);
}
@Override
public void loadAlbum(TestAlbum musicAlbum) {
mController.loadAlbum(mContext, musicAlbum);
}
...
//事实上,大可直接 Copy 本类到项目中、只修改作为泛型的那几个实体类。
}