本博客先介绍android 手机下载 3gp
本程序设定的逻辑是: 设计一个可以接收影片网址的EditText 输入框, 将该网址的影片下载至手机的SD卡上,以暂存的文件夹名称命名, 当单击播放时,之前的影片被停止,根据网址新下载下来的影片,最后SD卡上可能存了一堆缓存的影片文件,因此当退出程序时,需要记录回收删除哪些 "临时文件"。
注意这里播放按钮的事件处理是: 正在播放中的影片,按播放时不回放、不停止,判断输入的网址与正在播放的网址不同时,要停止正在播放中的影片,并启动线程下载新影片,
逻辑设计是一旦影片下载完成,便进入MediaPlayer.perpare() 与MediaPlayer.start() 。
在setDataSource 方法里,使用了File.createTempFile 方法创建下载的临时文件,因此每一次下载的影片临时文件的文件名都是不重复的,这里将下载文件所创建的临时文件的路径存入fileDownloaded_List 列表中
具体代码请参见 EX08_15 工程
下面介绍通过网络 播放mp3: 关于Runnable 存储FileOutputStream 技巧
程序运行原理是通过Runnable 发起线程,在线程中下载远程网站的mp3文件,通过网络传输(URLConnection) 的方式进行下载. 当下载完毕后,线程继续进行MediaPlayer.prepare() 与 MediaPlayer.start() 来播放音乐; 而当离开或关闭程序的同时,删除刚才下载的临时文件。
注意以下代码:
/* 捕捉使用 MediaPlayer 缓冲区的更新事件 */
mMediaPlayer01.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
Log.i(TAG, "Update buffer: " + Integer.toString(percent)+ "%");
}
});
在程序中,setOnBufferingUpdateListener 接口并没有将加载百分比输出至LogCat ,意味着以 下载(Downloading) 的方式 所取得的File 流方法, 并不会让 MediaPlayer 以流的方式来播放, 而是与一般存储在本地磁盘的播放方式一样.
要实现下载mp3 至 SD卡,可以通过 VideoView 传入URI 对象的方法,通过MediaPlayer 的setDataSource() 让远程的mp3 进行缓冲流的播放.也就是不是直接把 URL 字符串传入,而是通过以下方式:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(
Ex08_08.this,Uri.parse("http://www.dubblogs.cc:8751/Android/Test/Media/mp3/test.mp3");
)
try{
mp.prepare();
}catch(Exception ex){ }
mp.start();
具体代码请参见 EX08_08 工程