目录
一、测试环境说明
电脑环境
Windows 11
编写语言
JAVA
开发软件
Android Studio (2020)
开发软件只要大于等于测试版本即可(近几年官网直接下载也可以),若是版本低于测试版本请自行测试。项目需要根据你的软件自行适配
二、项目简介
基于网易云音乐api实现的一款简单的音乐播放器
所需权限
>1. 联网权限(播放、下载)
>2. 文件读写权限(保存文件)
已经完成的功能
- 搜索歌曲(使用wed端api,最多返回20条目)
- 播放控制(开始、暂停、切歌、模式控制)
- 播放列表(单击开始播放,长按删除)
- 下载歌曲(获取链接,后台服务下载,保存在系统下载目录)
该项目由编程乐学团队介入,进行功能页面完善。
三、项目演示
网络资源模板--基于Android studio 音乐播放器App
四、部设计详情(部分)
登陆页面
package com.caiji.musicplayer.activity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.caiji.musicplayer.R;
import com.caiji.musicplayer.database.SQLiteUserHelper;
import com.caiji.musicplayer.model.User;
public class LoginActivity extends AppCompatActivity {
private EditText usernameEditText;
private EditText passwordEditText;
private Button loginButton;
private TextView gotoRegister;
private SQLiteUserHelper sqLiteUserHelper;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
usernameEditText = findViewById(R.id.editTextUsername);
passwordEditText = findViewById(R.id.editTextPassword);
loginButton = findViewById(R.id.buttonLogin);
// 取得 TextView 对象
gotoRegister = findViewById(R.id.gotoRegister);
// 设置点击事件监听器
gotoRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
finish(); // 关闭登录界面
}
});
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = usernameEditText.getText().toString();
String password = passwordEditText.getText().toString();
if (isValidLogin(username, password)) {
// 登录成功,跳转到主界面
Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish(); // 关闭登录界面
} else {
// 登录失败,显示错误消息
Toast.makeText(LoginActivity.this, "登录失败,用户名或密码错误", Toast.LENGTH_SHORT).show();
}
}
});
}
private boolean isValidLogin(String username, String password) {
sqLiteUserHelper = new SQLiteUserHelper(this);
//判断用户名是否存在
User query = sqLiteUserHelper.queryUserByUsername(username);
if (query == null||query.getUsername()==null||query.getPassword()==null) {
return false;
}
if (query.getUsername().equals(username) && query.getPassword().equals(password)) {
return true;
}
return false;
}
}
1. 页面的结构
该页面采用垂直线性布局,整体结构清晰简洁。顶部居中显示"纵想音乐之美"标题,使用大号白色文字突出主题。
中部包含两个输入框,分别用于输入账号和密码,均设置白色边框和提示文字。
底部是登录按钮和跳转注册的文本链接。整个页面采用深色背景,与白色文字形成鲜明对比,营造出音乐类APP常见的沉浸式视觉体验。
元素间距合理,通过margin属性控制各组件间隔,确保界面美观且易于操作。
2. 使用到的技术
该页面运用了Android基础UI组件技术,包括TextView、EditText和Button等核心控件。
通过XML布局文件定义界面结构,使用padding和margin实现精细的间距控制。采用SQLite数据库技术存储和验证用户信息,通过SQLiteUserHelper类实现用户数据的查询功能。
页面交互采用事件监听机制,包括点击监听和文本链接跳转。使用了Toast提示框提供操作反馈,并通过Intent实现Activity之间的跳转,体现了典型的Android MVC架构模式。
3. 页面详细介绍
这是一个音乐APP的登录页面,设计风格简约现代。页面背景使用深色系,与白色文字形成强烈视觉对比,突出音乐APP的艺术感。
账号密码输入框采用带白色边框的设计,保持整体风格统一的同时提升可用性。登录按钮采用全宽度设计,符合用户操作习惯。
底部"去注册"链接采用文本按钮形式。整个页面布局层次分明,重要元素位置符合用户预期,操作流程符合常规登录场景的使用逻辑,体现了良好的用户体验设计。
播放页面
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/grey"
android:keepScreenOn="true"
tools:context=".activity.MainActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/tb_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
app:title="播放器页" />
<TextView
android:id="@+id/tx_mp3_song_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="5dp"
android:text="歌曲名字"
android:textColor="@color/black"
android:textSize="35sp" />
<TextView
android:id="@+id/tx_mp3_artist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="歌手名字" />
<SeekBar
android:id="@+id/sk_mp3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="20dp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tx_mp3_current_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="50dp"
android:text="0:00"
android:textColor="@color/black" />
<TextView
android:id="@+id/tx_mp3_total_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="50dp"
android:text="0:00"
android:textColor="@color/black" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
1. 页面的结构
该页面采用CoordinatorLayout作为根布局,内部嵌套ScrollView实现可滚动效果。
主体为垂直排列的LinearLayout,顶部是透明背景的工具栏,中部展示专辑封面图片(圆形裁剪),下方依次显示歌曲名、歌手名、进度条和播放时间。
底部是播放控制区域,包含循环模式切换、上一曲/下一曲、播放/暂停按钮和歌单入口。
整体布局层次分明,核心播放控件居中突出,辅助功能按钮合理分布,符合音乐播放器的典型设计规范。
2. 使用到的技术
采用MediaPlayerManager集中管理播放逻辑,支持列表循环/单曲循环/随机播放三种模式。
使用ObjectAnimator实现专辑封面旋转动画,配合线程实时更新进度条。通过Service处理后台下载功能,结合Retrofit进行网络请求获取歌曲详情。
权限管理模块确保存储访问安全,Glide加载网络图片并做圆形裁剪。菜单栏集成搜索和下载功能,采用SeekBar实现播放进度交互,整体体现模块化设计思想。
3. 页面详细介绍
这是音乐播放器的核心界面,主打沉浸式播放体验。专辑封面采用大尺寸圆形设计,播放时伴有旋转动画增强视觉动效。
进度条精确显示播放进度,支持拖拽跳转功能。底部控制区按钮图标直观,包含播放状态切换、曲目切换和播放模式循环切换功能。
工具栏提供搜索和歌曲下载入口,双击返回键防误触。整体采用灰黑色系背景突出内容,时间显示和按钮状态实时更新,完美平衡功能性与美观性,提供专业的音乐播放控制体验。
音乐列表
1. 页面的结构
该页面采用CoordinatorLayout作为根布局,内部包含一个全屏的RecyclerView用于展示歌曲列表。
每个列表项使用自定义布局,包含歌曲封面图片、歌曲名称和艺术家信息,采用垂直线性排列。
点击项会触发播放操作并返回上级界面,长按项弹出确认对话框可删除歌曲。
整体设计简洁,列表项间距合理,图片与文字信息层次分明,符合音乐播放列表的常见交互模式。
2. 使用到的技术
基于RecyclerView实现高性能列表展示,配合LinearLayoutManager管理布局。
使用Glide异步加载网络图片优化性能。通过自定义RecyclerViewAdapter处理数据绑定和事件回调,实现点击播放和长按删除功能。
采用AlertDialog构建交互式确认弹窗,确保删除操作的安全性。与MediaPlayerManager深度集成,实现列表数据与播放状态的实时同步,体现模块化设计思想。
3. 页面详细介绍
这是音乐播放器的歌单管理界面,专注于歌曲列表的高效展示和操作。每个列表项清晰展示歌曲封面、名称和作者信息,图片采用默认方形裁剪。
点击项立即播放对应歌曲并自动返回播放页,提供流畅的播放体验。长按项可触发删除功能,通过二次确认防止误操作,当仅剩一首歌曲时会提示保护。
整体采用与主界面一致的灰黑色系,保持应用风格统一,是连接歌曲浏览与播放控制的重要枢纽界面。
五、项目源码
👇👇👇👇👇快捷方式👇👇👇👇👇