第一章 绪论
1.1选题背景
由于时代快速发展,各种各样的音乐播放器层出不穷,此时需要一个可以根据个人爱好来播放的音乐播放器就尤为重要,因此我特意制作了一个根据自己喜好的音乐播放器,只需要把音乐文件放进制定的目录下即可。
1.2开发技术
该App利用了SQlite数据库对于用户的管理,还有MediaPlayer媒体播放器的使用,和各种布局加以一些控件得以使界面看着舒服,还有利用了广播信息对于用户的操作进行提示。并且对于音乐文件得存储也使用了sdcard文件存储的技术,还有组件间的通信和广播信息等技术。主要使用Android,java开发。
第二章 需求及可行性分析
2.1需求分析
Android应用软件包含人机界面(控件、菜单、工具栏、对话框等)、组件通信、后台服务、数据存储、媒体播放、手机特色等功能。
2.2 可行性分析
-
首先要对用户进行注册和登录修改删除等功能:可以使用sqlite数据库
-
要扫描文件夹的mp3文件:使用Java文件流的读写操作和Android的存取权限控制
-
要实现音乐的播放:使用MediaPlayer类来对音乐进行操作
-
布局使用安卓自带的LinearLayout标签
-
菜单使用安卓自带的Menu类
-
按钮使用安卓自带的Button类
-
还有对权限进行控制:使用Mainfest.permission等属性赋予权限
-
对于组件间的通信使用Intent类
-
对于部分广播信息使用Toast类
-
确定使用的技术,进行实际开发。
第三章 系统分析
MainActivity类
Protect void onCreate(Budle): 构建主界面
对于主页面一些组件的管理和对于一些事件的监听
Record类
对于一些常用的变量要做静态存储处理,比如说用户名,密码,数据库链接,还有登录时间,当前播放的音乐文件等
MusicActivity类
该类主要用于音乐播放的初始化处理和对音乐进行播放,暂停,重置播放等功能,以下是该类应该具备的功能。
Protect void onCreate(Bundle): 构建播放音乐界面
Public boolean onCreateOptionsMenu(Menu): 添加菜单(返回,注销,更新信息)这个功能应当用于登录之后的每一个页面
Public void onOptionsItemSelected(MenuItem):对于子菜单进行监听处理,这个功能也应当用于登录之后的每一个页面
Public void onRequestPermissionsResult(int String[] int[]): 对于音乐播放的权限处理
Protect void onDestroy(): 用于关闭释放MediaPlayer播放器
Private void initMediaPlayer(): 对于MusicPlayer进行初始化和准备工作。
Time类
该类主要用于获取当前时间(原本还写了一个日志类,但是由于时间紧凑,该类的功能没能得到补充)
Public static String getCurrentTime() 用于获取当前时间
DBAdapter类
该类主要对于数据库的一些增删查改操作进行封装,此处方法过多就不进行一一解释了。只介绍一些重要的方法和内部类。
Private static Class DBOpenHelper extends SQLiteOpenHelper静态Helper类,用于建立更新和打开数据库
Public long insert(User): 用于插入用户,实现注册功能
Public User queryOneData(String String): 用于查找指定某一个用户,实现用户登录功能。
Public long deleteOneData(String): 用于删除某个指定用户,实现用户注销功能。
Public long updateOneData(String User):根据指定条件更新某个用户的信息,实现更新用户信息功能。
User 类
对于数据库的用户表而建的用户类。
UserMsgActivity类
该类用于展示用户登录之后的页面,比如说展示一些提示信息,登陆时间和用户喜爱的音乐,还有菜单的对用户的信息进行管理。有以下主要方法
Protect void onCreate(Bundle): 创建用户登录之后的页面
Public void find(File, String): 查找某一个指定文件,也就是实现播放某一个指定音乐功能。
Public ArrayList<File> getAllMusic(): 获取目录下的所有音乐文件。
Public boolean onCreateOptionsMenu(Menu): 添加菜单(返回,注销,更新信息)这个功能应当用于登录之后的每一个页面
Public void onOptionsItemSelected(MenuItem):对于子菜单进行监听处理,这个功能也应当用于登录之后的每一个页面
UpdateUser 类
该类用于展示用户更新信息的页面,实现用户更新密码,更换用户名等功能。
Protect void onCreate(Bundle) : 用于创建用户更新信息的页面。
Public boolean onCreateOptionsMenu(Menu): 添加菜单(返回,注销,更新信息)这个功能应当用于登录之后的每一个页面
Public void onOptionsItemSelected(MenuItem):对于子菜单进行监听处理,这个功能也应当用于登录之后的每一个页面
还有一些事件监听方法过多就不进行一一列举了。
第四章 系统设计及实现
4.1系统设计:
首先应当分为四个包分别装有对应功能的类,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/c6d7691d42b3a4a6f44fca76eb69168b.png)
activity包下存放的是更新用户信息类(UpdateUser)和展示用户信息类(UserMsgActivity)
DB包下存放的是数据库操作类(DBAdapter)和实体用户类(User)
log包下存放的是日志类(Logger)和时间类(Time)// 注:日志类暂无实现该功能
lyl包下存放的是主类(MainActivity)和记录类(Record)
musicplayer包下存放的是音乐操作类(MusicActivity)
4.2实现
com.example.activity.UpdateUser
package com.example.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.Nullable;
import com.example.DB.User;
import com.example.lyl.R;
import com.example.lyl.Record;
public class UpdateUser extends Activity {
private EditText agoPassword;
private EditText newPassword;
private EditText againPassword;
private EditText agoUsername;
private EditText newUsername;
private Button updatePassword;
private Button updateUsername;
private Button resetUsername;
private Button resetPassword;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updateuser);
agoPassword = findViewById(R.id.editAgoPassword);
newPassword = findViewById(R.id.editNewPassword);
againPassword = findViewById(R.id.editAgainPassword);
updatePassword = findViewById(R.id.updatePassword);
agoUsername = findViewById(R.id.editAgoUsername);
newUsername = findViewById(R.id.editNewUsername);
resetPassword = findViewById(R.id.resetPassword);
updateUsername = findViewById(R.id.updateBtnUsername);
resetUsername = findViewById(R.id.resetUsername);
agoUsername.setText(Record.username);
updatePassword.setOnClickListener(onUpdatePwClickListener);
updateUsername.setOnClickListener(onUpdateUnClickListener);
resetPassword.setOnClickListener(onResetPwClickListener);
resetUsername.setOnClickListener(onResetUnClickListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInf