DownloadMusicPageByURLConnection
mipmap-xhdpi
目录main_activity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/background"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp">
<EditText
android:id="@+id/edtMusicUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/input_music_url"
android:lines="3" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btnDownload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:onClick="doDownload"
android:text="@string/download"
android:textSize="20sp" />
<Button
android:id="@+id/btnPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:onClick="doPlay"
android:text="@string/play"
android:textSize="20sp" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:onClick="doClear"
android:text="@string/clear"
android:textSize="20sp" />
LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#bbbbbb" />
<ProgressBar
android:id="@+id/pbDownloadMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
LinearLayout>
strings.xml
<resources>
<string name="app_name">利用URLConnection下载音乐string>
<string name="download">下载string>
<string name="input_music_url">输入音乐网址string>
<string name="play">播放string>
<string name="clear">清空string>
resources>
MainActivity
AsyncTask
创建DownloadTask
类/**
* 下载资源的异步任务
*/
private class DownloadTask extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// 让进度条可见
pbDownloadMusic.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(String... params) {
// 获取音乐网址字符串
String strMusicUrl = params[0];
try {
// 创建URL对象(空格要转换成%20才能识别)
URL url = new URL(strMusicUrl.replace(" ", "%20"));
// 获取URL连接
URLConnection connection = url.openConnection();
// 获取字节输入流
InputStream is = connection.getInputStream();
// 定义音乐下载目录
downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
// 获取音乐文件名
musicName = strMusicUrl.substring(strMusicUrl.lastIndexOf("/") + 1);
// 创建文件字节输出流
FileOutputStream fos = new FileOutputStream(downloadDir.getAbsolutePath() + "/" + musicName);
// 定义字节缓冲区
byte[] buffer = new byte[1024];
// 读取字节输入流
int len = 0;
while ((len = is.read(buffer)) != -1) {
// 将读取的数据写入目标文件
fos.write(buffer, 0, len);
}
// 关闭输出流
fos.close();
// 关闭输入流
is.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
super.onPostExecute(unused);
// 让进度条消失
pbDownloadMusic.setVisibility(View.GONE);
// 提示用户下载成功
Toast.makeText(MainActivity.this, "恭喜,音乐文件下载成功!", Toast.LENGTH_SHORT).show();
}
}
doDownload(View view)
方法/**
* 下载按钮单击事件处理方法
*
* @param view
*/
public void doDownload(View view) {
// 获取音乐网址字符串
String strMusicUrl = edtMusicUrl.getText().toString();
if (strMusicUrl.equals("")) {
Toast.makeText(this, "请输入音乐网址!", Toast.LENGTH_SHORT).show();
return;
}
// 创建下载任务
DownloadTask task = new DownloadTask();
// 执行下载任务,传入音乐网址
task.execute(strMusicUrl);
}
doPlay(View view)
方法/**
* 播放按钮单击事件处理方法
*
* @param view
*/
public void doPlay(View view) {
// 用户先点击了下载按钮
if (downloadDir != null && musicName != null) {
try {
// 重置媒体播放器
mp.reset();
// 设置媒体播放器的数据源
mp.setDataSource(downloadDir.getAbsolutePath() + "/" + musicName);
// 加载音乐文件到内存
mp.prepare();
// 播放音乐文件
mp.start();
// 提示用户
Toast.makeText(this, "开始播放……", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "音乐播放失败!", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "请先下载音乐文件!", Toast.LENGTH_SHORT).show();
}
}
doClear(View view)
方法/**
* 清空按钮单击事件处理方法
*
* @param view
*/
public void doClear(View view) {
// 清空音乐网址文本框
edtMusicUrl.setText("");
}
webapps
里创建music
目录,放置一首mp3音乐文件 - Terra.mp3
双击Tomcat的bin
目录里的startup.bat
批处理文件图标
查看本机IP地址:192.168.129.112
/mnt/sdcard/Download/Terra.mp3