Closed L-X-J closed 5 years ago
一般首次打开的时候,服务连接的回调还没有回来,会导致获取duration的时候连接未连接,未能获取到正确的duration,我推荐你可以clone代码下来自己改。
/**
* 获取媒体时长,单位毫秒
*/
public long getDuration(String songUrl) {
long duration = -1;
MediaSessionConnection connection = MediaSessionConnection.getInstance();
// 一般来说,首次启动会导致连接未建立
if (connection.isConnected()) {
duration = connection.getNowPlaying().getLong(MediaMetadataCompat.METADATA_KEY_DURATION);
//如果没设置duration
if (duration == 0) {
if (mPlayback != null) {
duration = mPlayback.getDuration();
}
}
//当切换歌曲的时候偶尔回调为 -9223372036854775807 Long.MIN_VALUE
if (duration < -1){
// TODO BUG
return -1;
}
} else {
MediaPlayer mp = MediaPlayer.create(sContext, Uri.parse(songUrl));
duration = (long) mp.getDuration();
}
return duration;
}
因为MediaPlayer创建需要歌曲地址,所以签名也得改。
这也只是个暂时折中的方法,期待作者早日修复!
出现负数一般是音频没加载完所以获取不到时长,判断一下就行
OK,加了判断<0
的时候进度不展示
调用
MusicManager.getInstance().getDuration()
的时候返回值为负数,跪求大佬指导一二 日志如下:过一会就正常了 我是这么调用的