当前位置: 代码迷 >> Android >> 关于ANDROID上载与音乐播放
  详细解决方案

关于ANDROID上载与音乐播放

热度:7   发布时间:2016-05-01 17:09:45.0
关于ANDROID下载与音乐播放
下载文件:
主要是打开一个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的方法以外边下载边播放的方法
1 楼 kkvsyy 2011-06-02  
学习学习学习学习
  相关解决方案