安卓案例:利用URLConnection下载音乐
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓案例:利用URLConnection下载音乐相关的知识,希望对你有一定的参考价值。
文章目录
一、安卓网络编程
二、运行效果
- 输入音乐网址,下载并播放音乐
三、涉及知识点
- 线性布局(LinearLayout)
- 媒体播放器(MediaPlayer)
- 文本编辑框(EditText)
- 按钮(Button)
- 网址连接类(URLConnection)
- 异步任务(AsyncTask)
四、实现步骤
(一)创建安卓应用
- 基于Empty Activity创建安卓应用 -
DownloadMusicPageByURLConnection
(二)准备图片素材
- 将背景图片拷贝到
mipmap-xhdpi
目录
(三)主布局资源文件
- 主布局资源文件 -
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<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
1、声明变量,获取控件实例
- 声明件变量,然后获取控件实例
2、请求读写外置存储卡权限
- 检查是否读写权限,如果没有,那么就请求读写权限
3、创建下载资源的异步任务类
- 在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();
4、编写下载按钮单击事件处理方法
- 编写
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);
5、编写播放按钮单击事件处理方法
- 编写
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();
6、编写清空按钮单击事件处理方法
- 编写
doClear(View view)
方法
/**
* 清空按钮单击事件处理方法
*
* @param view
*/
public void doClear(View view)
// 清空音乐网址文本框
edtMusicUrl.setText("");
(七)Tomcat服务器上放置音乐文件
- 在
webapps
里创建music
目录,放置一首mp3音乐文件 -Terra.mp3
(八)启动Tomcat服务
-
双击Tomcat的
bin
目录里的startup.bat
批处理文件图标
-
查看本机IP地址:
192.168.129.112
(九)运行程序,查看结果
- 输入音乐网址,下载并播放音乐
- 查看下载的音乐文件 -
/mnt/sdcard/Download/Terra.mp3
以上是关于安卓案例:利用URLConnection下载音乐的主要内容,如果未能解决你的问题,请参考以下文章