姊妹篇

【Android】音乐播放器边播边缓存(一)AndroidVideoCache的使用方法

【Android】音乐播放器边播边缓存(二)AndroidVideoCache的后台播放

 当你好不容易找到了一个完美的边播边缓存的音乐播放器框架,(不知道该怎么形容的)产品经理忽然换需求了????一定要先下载再播放???!!!心里千万匹羊驼呼啸而过。但是还是得改不是?开始吧。

1.思路1,改AndroidVideoCache的源码,在没有缓存的时候,设置播放器为暂停状态,改了八百年未果,直接checkout了

2.思路2,自己实现下载过程。具体实现思路为   

① if (proxy.isCached(musicUrl))    用代理先判断是否已缓存。

② 如果已缓存,逻辑不变正常播放;如果未缓存,开启一个下载线程。

    class downloadThread extends Thread {        public void run() {            DownloadUtils.download(MusicPlayActivity.this, TAG, "https://" + targetUrl);            Message msg = new Message();            msg.what = MUSIC_DOWN_FINISH;            mHandler.sendMessage(msg);        }    }
public static void download(Context context, String tag, String downloadUrl) {        InputStream is = null;        FileOutputStream os = null;        try {            URL url = new URL(downloadUrl);            //打开连接            URLConnection conn = url.openConnection();            //打开输入流            is = conn.getInputStream();            //获得长度            int contentLength = conn.getContentLength();            Log.d(tag, "contentLength = " + contentLength);            //创建文件夹 /files/music/audio-cache/            String dirName = context.getExternalFilesDir("music") + DOWNLOAD_FILE_NAME;            File file = new File(dirName);            //不存在创建            if (!file.exists()) {                file.mkdir();            }            //下载后的文件名            String musicName = generateMusicName(downloadUrl);            String fileName = dirName + musicName + ".download";            File file1 = new File(fileName);            if (file1.exists()) {                file1.delete();            }            //创建字节流            byte[] bs = new byte[1024];            int len;            os = new FileOutputStream(fileName);            //写数据            while ((len = is.read(bs)) != -1) {                Log.d(tag, "downloading");                os.write(bs, 0, len);            }            //完成后关闭流            Log.d(tag, "download-finish");            file1.renameTo(new File(dirName + musicName));            Toast.makeText(context, "下载完成啦,我去好棒棒", Toast.LENGTH_LONG).show();        } catch (Exception e) {            e.printStackTrace();        } finally {            if (os != null) {                try {                    os.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if (os != null) {                try {                    is.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

③下载完成后,向UI线程发送一条消息,通知界面更新,并且开始播放音乐

mHandler = new Handler() {            @Override            public void handleMessage(Message msg) {                //修改用户界面                switch (msg.what) {                    case MUSIC_DOWN_FINISH:                        if (DownloadUtils.isCached(MusicPlayActivity.this, targetUrl)) {                            if (dialog != null) {                                dialog.dismiss();                            }                            musicPlayBinder.setMusicId(musicId);                            playbackControlView.setMusicName(musicName);                            playbackControlView.setDiscMove(MusicPlayActivity.this, imageUrl);                            musicPlayBinder.setMusicUrl2(targetUrl, selPosition, musicType, imageUrl);                        } else {                            if (dialog != null) {                                dialog.setMessage("下载失败" + DownloadUtils.generateMusicName(targetUrl));                                dialog.setCancelable(true);                            }                        }                        break;                    default:                        break;                }            }        };

④效果图,如下 ↓




写在后面:

就很难受,强行改造了一个支持边播边缓存的框架,改成下载后才播,那我为什么不用一个普通的音乐播放器呢????

啥都不说了,搬砖去了。

更多相关文章

  1. 音乐你的生活—Android(安卓)QQMusic 设计实录
  2. Android(安卓)AppWidget(桌面小部件-音乐播放动画)
  3. Android(安卓)SharePreference 总结
  4. android显示缓存大小和清除缓存功能
  5. Android(安卓)对Bitmap的内存优化
  6. Android(安卓)异步加载图片
  7. Android(安卓)编译基础知识
  8. android音乐播放器开发在线加载歌词
  9. Java(Android)数据结构汇总(二)-- Set(上)

随机推荐

  1. android 中文api (62) ―― ViewSwitcher
  2. Android工程的gradle版本和gradle plugin
  3. android google map的使用
  4. android apk dex odex jar 等文件的 反编
  5. 细数Android(安卓)Bug
  6. Android(安卓)OpenGLES 实现结构
  7. android自学笔记《二》——开发环境的搭
  8. 通过Titanium Studio为Android(安卓)APK
  9. Android(安卓)StatusBar相关设置
  10. Android(安卓)常用代码整理:Android(安卓)