浏览 2395 次
锁定老帖子 主题:关于ANDROID下载与音乐播放
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-02
主要是打开一个URL的INPUTSTREAM,还有一个本地文件OUTPUTSTREAM,然后就读一段写进去一段.是另外启了个线程进行的 主要代码如下: URL url=null; URLConnection conn=null; InputStream is=null; OutputStream os=null; try { url=new URL(getUrl()); conn=url.openConnection(); file_size=conn.getContentLength()+""; cur_size="0"; updateRecord(); is=conn.getInputStream(); os=new FileOutputStream(save_path+save_name); byte[] buffer=new byte[4096]; int ct=is.read(buffer); int iCur=Integer.parseInt(cur_size); while(ct>-1 && "1".equals(state)){ Log.v("downloadFilePo", "download "+ct+" bytes"); os.write(buffer, 0, ct); iCur+=ct; cur_size=iCur+""; ct=is.read(buffer); } is.close(); os.close(); 另外还有断点下载,主要实现原理就是记录下上次下载到哪个字节,然后打开URL的输入流时 conn.setRequestProperty("User-Agent", "NetFox"); conn.setRequestProperty("RANGE", "bytes="+getCur_size()+"-");表示从getCur_size()个字符开始发送数据. 即可. 顺便做了个页面来管理所有下载的内容, 这里使用的是listview,每一个格子是个自定义的VIEW. 更新UI的时候有个问题,就是只能在UI主线程中更新,所以在自定义的VIEW中定义了一个handler,新启动一个线程轮询,然后handler.sendMessage(); 音乐播放: 播放本地文件的话没有问题,直接set好path后 prepare(),再start(). 对于网上的音乐的话,边播放边下载时有点问题.我想到的方法是另起个线程下载音乐文件,一开始先缓冲一段数据,开始播放. 实现MediaPlayer的OnCompletion方法,表示在音乐播放完成后做出动作,因为是边播放边下载,所以第一次所加载的很快就会播放完, mp.setOnCompletionListener(this); public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub Log.v(tag, "onCompletion"); if(goon){ resetDataSource(); } } public void resetDataSource() { try { int cur=mp.getCurrentPosition(); mp.reset(); mp.setDataSource(path); mp.prepare(); mp.seekTo(cur); mp.start(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 这种方法的话由于prepare()耗费资源过大,播放会卡一下. 不知道哪位知道除了直接给Mediaplayer设置网络url的方法以外边下载边播放的方法 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |