论坛首页 移动开发技术论坛

关于ANDROID下载与音乐播放

浏览 2395 次
精华帖 (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的方法以外边下载边播放的方法
  • 大小: 40.5 KB
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics