做音乐播放器,有时候会用到系统自带的mediaplayer播放器,这个播放器底层是在linux上面,封装了一些api供使用者调用,由于网络HTTP请求歌曲流这一块的都已经被封装了,所以要想实现歌曲边下载同时还能缓存到我们的文件夹中,需要做的就是从请求过程中间再开辟一个中间代理,通过代理去处理之间的输入输出流,同时在代理中实现本文的功能,这样就能实现我们想要的边下边播了。
边下载边播放
文件头部分只要解析成功,那么内容部分可以后续补充让 MediaPlayer 解析到即可
1 、文件下载(Utils包建一个工具类)
public class MediaDownloader {
private OnDownloadListener onDownloadListener;
public MediaDownloader(OnDownloadListener onDownloadListener) {
this.onDownloadListener = onDownloadListener;
}
/**
* 下载媒体文件
* @param url 下载地址
* @param savePath 保存路径
*/
public void download(String url, String savePath) {
try {
URL link = new URL(url);
HttpURLConnection con = (HttpURLConnection) link.openConnection();
int code = con.getResponseCode();
if (code == 200) {
//获取下载总大小
int len = con.getContentLength();
if (null != onDownloadListener) {
onDownloadListener.onStart(len,savePath);
}
RandomAccessFile rf = new RandomAccessFile(savePath, "rw");
rf.setLength(len);
byte[] buf = new byte[1024];
//当次读取的数量
int num;
//当前下载的量
int count = 0;
InputStream in = con.getInputStream();
while ((num = in.read(buf)) != -1) {
rf.write(buf, 0, num);
count += num;
if (null != onDownloadListener) {
onDownloadListener.onDownloading(count);
}
}
rf.close();
in.close();
}
con.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public interface OnDownloadListener {
void onStart(int size,String pa