android实现一个具有音乐下载功能的代码和布局文件
时间: 2024-02-24 20:56:34 浏览: 25
以下是一个简单的Android应用程序,其中包含音乐下载功能的代码和布局文件:
布局文件 `activity_main.xml`:
```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:orientation="vertical">
<!-- 显示音乐下载链接的编辑框 -->
<EditText
android:id="@+id/editTextMusicUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入音乐下载链接" />
<!-- 显示下载进度条的进度条控件 -->
<ProgressBar
android:id="@+id/progressBarDownload"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<!-- 下载按钮 -->
<Button
android:id="@+id/buttonDownload"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下载" />
</LinearLayout>
```
代码文件 `MainActivity.java`:
```java
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class MainActivity extends AppCompatActivity {
private EditText editTextMusicUrl;
private ProgressBar progressBarDownload;
private Button buttonDownload;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextMusicUrl = findViewById(R.id.editTextMusicUrl);
progressBarDownload = findViewById(R.id.progressBarDownload);
buttonDownload = findViewById(R.id.buttonDownload);
buttonDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 获取音乐下载链接和保存路径
String musicUrl = editTextMusicUrl.getText().toString();
String savePath = getExternalFilesDir(null).getAbsolutePath() + "/music.mp3";
// 开始下载音乐
new DownloadMusicTask().execute(musicUrl, savePath);
}
});
}
private class DownloadMusicTask extends AsyncTask<String, Integer, Boolean> {
@Override
protected void onPreExecute() {
// 显示进度条,隐藏下载按钮
progressBarDownload.setVisibility(View.VISIBLE);
buttonDownload.setVisibility(View.GONE);
}
@Override
protected Boolean doInBackground(String... strings) {
String musicUrl = strings[0];
String savePath = strings[1];
try {
// 创建URL对象
URL url = new URL(musicUrl);
// 打开URL连接
URLConnection connection = url.openConnection();
connection.connect();
// 计算文件大小和下载进度
int fileLength = connection.getContentLength();
int downloadSize = 0;
// 创建输入流和输出流
InputStream input = new BufferedInputStream(connection.getInputStream());
FileOutputStream output = new FileOutputStream(new File(savePath));
// 缓冲区大小
byte[] buffer = new byte[1024];
int count;
// 开始下载
while ((count = input.read(buffer)) != -1) {
output.write(buffer, 0, count);
downloadSize += count;
// 更新下载进度
publishProgress(downloadSize * 100 / fileLength);
}
// 关闭输入流和输出流
output.flush();
output.close();
input.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
protected void onProgressUpdate(Integer... values) {
// 更新下载进度条
progressBarDownload.setProgress(values[0]);
}
@Override
protected void onPostExecute(Boolean success) {
// 隐藏进度条,显示下载按钮
progressBarDownload.setVisibility(View.GONE);
buttonDownload.setVisibility(View.VISIBLE);
// 显示下载结果
if (success) {
Toast.makeText(MainActivity.this, "下载成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
}
}
}
}
```
这个应用程序具有以下功能:
1. 用户输入音乐下载链接。
2. 用户点击“下载”按钮。
3. 应用程序下载音乐并显示下载进度。
4. 下载完成后,应用程序显示下载结果。