课 程 设 计 报 告
院 系:专 业:题 目:科 目:学 生:指导教师:完成时间:
目 录
- 引言1
1.1 目的1
1.2 背景1
-
需求分析1
-
系统设计1
3.1总体设计1
3.2功能设计1
- 系统开发2
4.1源程序清单2
4.2功能实现2
- 系统测试2
5.1测试方法2
5.2测试实现2
5.3测试结果2
-
结论与心得2
-
参考文献3
-
引言
1.1 目的
该APP实现了播放音乐MV的功能,连接在包中导入数据库,可上传大量的音乐MV供使用者欣赏,使用前需要进行注册登录获取自己的账号密码,可直接从一个音乐MV跳转到下一个音乐MV,随意调整视频进度等功能。
1.2 背景
在人们繁忙的生活中,一天之余我们都需要休息,可以通过此款音乐播放器听音乐,播放音乐,看音乐MV,让人们生活得到放松。 - 需求分析
- 当人们疲惫时,可以通过听音乐缓解。
- 当人们闲暇时,可以听音乐放松心情。
- 当人们快乐时,可以听音乐一起快乐。
- 当人们悲伤时,可以听音乐疗伤。
- 当人们生气时,可以听音乐消气。
- 系统设计
3.1总体设计
1.基本的手机显示界面
2.用户的注册
3.用户登录
4.用户进入音乐播放器
5.点击列表中想要播放的音乐
6.跳转到音乐MV界面播放
7.用户可以暂停音乐,播放音乐,随意跳动进度条,上一首音乐,下一首音乐。
3.2功能设计
- 系统开发
4.1源程序清单
1、工程配置文件
- 工程结构目录
1.
4.2功能实现
1.
- 数据库存储相关代码:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class MyDBHelper extends SQLiteOpenHelper {
private static final String DBNAME=”financial.db”;
private static final int VERSION=1;
public MyDBHelper(Context context) {
super(context, DBNAME, null, VERSION);
}
//1 创建数据库
@Override
public void onCreate(SQLiteDatabase db) {
//创建用户表
db.execSQL(“create table tb_userinfo(id integer primary key autoincrement,name varchar(10),pwd varchar(15),email varchar(50),phone varchar(11))”);
}
//2 升级数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
2.用户实现注册以及账号密码存储的相关代码:
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.videoplayer.R;
import com.example.videoplayer.db.MyDBHelper;
public class LoginActivity extends AppCompatActivity {
//1 定义对象
EditText et_name,et_pwd;
Button btn_newregister,btn_login;
MyDBHelper mhelper;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_login);
//2 绑定控件
initView();
//3 登录按钮功能的实现
btnLogin();
//4 新用户注册按钮功能的实现
btnNewRegister();
}
//2 绑定控件——————–代码
private void initView() {
et_name=findViewById(R.id. et_name_lg);
et_pwd=findViewById(R.id. et_pwd_lg);
btn_newregister=findViewById(R.id. bt_newregister_lg);
btn_login=findViewById(R.id. bt_login_lg);
mhelper=new MyDBHelper(LoginActivity.this);
db=mhelper.getWritableDatabase();
}
//3 登录按钮功能的实现—————————代码
private void btnLogin() {
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//首先:获取输入的用户名和密码
String inputname=et_name.getText().toString();
String inputpwd=et_pwd.getText().toString();
//其次:对获取的用户名和密码进行判断
if(inputname.equals(“”)||inputpwd.equals(“”)){ //用户名或密码为空
Toast. makeText(LoginActivity.this,”用户名或密码不能为空”,Toast. LENGTH_SHORT).show();
}else{ //用户名或密码不为空时,我们再对输入的正确性进行判断。
// 根据输入的用户名和密码从数据库中查询
Cursor cursor =db.rawQuery(“select * from tb_userinfo where name=? and pwd=?”,new String[]{inputname,inputpwd});
//根据查询到的结果进行判断
if (cursor.moveToNext()){ //查询到时
@SuppressLint(“Range”) String getname=cursor.getString(cursor.getColumnIndex(“name”));
@SuppressLint(“Range”) String getpwd=cursor.getString(cursor.getColumnIndex(“pwd”));
if(inputname.equalsIgnoreCase(getname)&&inputpwd.equalsIgnoreCase(getpwd)){
SharedPreferences.Editor editor=getSharedPreferences(“userinfo”,0).edit();
editor.putString(“username”,inputname);
editor.putString(“userpwd”,inputpwd);
editor.commit();
Toast. makeText(LoginActivity.this,”用户名和密码正确,欢迎登陆”,Toast. LENGTH_SHORT).show();
Intent intent=new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}else{ //没有查询到结果时
Toast. makeText(LoginActivity.this,”用户名或密码错误,请重新输入”,Toast. LENGTH_SHORT).show();
et_name.setText(“”);
et_pwd.setText(“”);
}
}
}
});
}
//4 新用户注册按钮功能的实现————————代码
private void btnNewRegister() {
btn_newregister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
finish();
}
});
}
}
3.运行后虚拟机显示相关代码:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
button=findViewById(R.id. button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,VideoActivity.class);
startActivity(intent);
}
});
}
}
4.播放音乐MV相关代码:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;
public class PlayActivity extends AppCompatActivity {
//定义对象
private TextView my_videoname;
private VideoView my_videoview; //视频播放器
private MediaController mediaController; //媒体控制柄
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_play);
initView(); //控件初始化
initData(); //数据初始化
}
private void initView() {
my_videoname=findViewById(R.id. my_videoname);
my_videoview=findViewById(R.id. my_videoview);
mediaController=new MediaController(this);
}
private void initData() {
//1、获取从音乐列表传过来的视频名称和视频地址
String myvideoname=getIntent().getStringExtra(“videoname”);
String myvideourl=getIntent().getStringExtra(“videourl”);
//2、将视频名称显示在文本框中,将视频地址关联到播放器中
my_videoname.setText(myvideoname);
my_videoview.setVideoPath(myvideourl);
//视频播放器和媒体控制柄关联起来
my_videoview.setMediaController(mediaController);
//媒体控制柄和视频播放器关联起来
mediaController.setMediaPlayer(my_videoview);
//3、启动视频播放器播放视频
my_videoview.start();
}
}
5.数据库存储数据相关代码:
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.videoplayer.R;
import com.example.videoplayer.db.MyDBHelper;
public class RegisterActivity extends AppCompatActivity {
//3定义对象
EditText et_name,et_pwd,et_email,et_phone;
Button btn_register,btn_cancel;
MyDBHelper mhelper; //创建一个数据库类文件
SQLiteDatabase db; //创建一个可以操作的数据库对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_register);
//4 绑定控件
initView();
//5 注册按钮功能的实现
btnRegister();
//6 取消按钮功能的实现
btnCancel();
}
//4 绑定控件——–代码
private void initView() {
et_name=findViewById(R.id. et_name_rg);
et_pwd=findViewById(R.id. et_pwd_rg);
et_email=findViewById(R.id. et_email_rg);
et_phone=findViewById(R.id. et_phone_rg);
btn_register=findViewById(R.id. bt_ok_rg);
btn_cancel=findViewById(R.id. bt_cancel_rg);
mhelper=new MyDBHelper(RegisterActivity.this);
db=mhelper.getWritableDatabase();
}
//5 注册按钮功能的实现——————–代码
private void btnRegister() {
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建一个对象,用来封装一行数据
ContentValues values=new ContentValues();
values.put(“name”,et_name.getText().toString()); //将输入的用户名放到name列
values.put(“pwd”,et_pwd.getText().toString()); //将输入的密码放到pwd列
values.put(“email”,et_email.getText().toString()); //将输入的邮箱放到email列
values.put(“phone”,et_phone.getText().toString()); //将输入的电话放到phone列
//将封装好的一行数据保存到数据库的tb_userinfo表中
db.insert(“tb_userinfo”,null,values);
Toast. makeText(RegisterActivity.this,”注册成功”,Toast. LENGTH_SHORT).show();
}
});
}
//6 取消按钮功能的实现——————-代码
private void btnCancel() {
btn_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}
});
}
}
6.音乐MV传获参代码:
public class Video {
private String videoName;
private String videoUrl;
public String getVideoName() {
return videoName;
}
public String getVideoUrl() {
return videoUrl;
}
public Video(String videoName, String videoUrl) {
this.videoName = videoName;
this.videoUrl = videoUrl;
}
}
7.音乐获取MV名字和地址代码:
import cn.bmob.v3.BmobObject;
import cn.bmob.v3.datatype.BmobFile;
public class video_table extends BmobObject {
private String video_name;
private BmobFile video_url;
public String getVideo_name() {
return video_name;
}
public BmobFile getVideo_url() {
return video_url;
}
}
8.音乐列表基本显示代码:
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.FindListener;
public class VideoActivity extends AppCompatActivity {
//定义对象
Spinner spin1;
RecyclerView recyclerView;
List
9.联网获取音乐Mv代码:
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class VideoAdapter extends RecyclerView.Adapter
10.登录界面跳转注册界面代码:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.videoplayer.R;
public class WelcomeActivity extends AppCompatActivity {
//定义对象
Button bt_know_wel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_welcome);
//绑定控件
bt_know_wel=findViewById(R.id. bt_know_wel);
//按钮单击事件
bt_know_wel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(WelcomeActivity.this,LoginActivity.class);
startActivity(intent);
finish();
}
});
}
}
- 系统测试
5.1测试方法
使用安卓手机或虚拟机将写完的项目跑入,看运行结果。
5.2测试实现
1.实现用户注册,将账号密码存储进数据库中。
2.实现用户登录
3.实现音乐列表显示
4.实现点击相关音乐跳转到播放音乐以及音乐MV界面
5.实现音乐暂停,切换,跳转,上一首,下一首。
5.3测试结果
2.
3.
4.
5.
6.
7.
- 结论与心得
通过本次Android项目——音乐播放器,让我对Android有了更深入的理解,对Android代码有了更加清晰的逻辑性。写完音乐播放器这个项目,让我觉得编写Android是一个很有趣的事情。通过自学和听课,我学会了如何完成一个项目,在今后的学习中,也会更加积极。
参考文献 -
[1] 张逸飞,严张凌.基于Android的智能家居客户端开发[J].信息与电脑(理论版),2020,32(13),63-65.
-
[2] 吴红梅,李慧.基于Android的智能家居系统开发[J]. 科技展望,2017,(04):21.
-
[3] 陈国童,邱兴阳.基于WIFI的Android手机智能家居控制[J],辽宁大学学报(自然科学版),2020,47(1),36-37.
-
[4] 王宏博.计算机软件设计的原则分析[J],数码世界,2018(7),1.
-
[5] 徐连成.基于Labview智能家居控制系统设计与仿真[J].电子技术与软件工程,2020(15):76-78.
-
[6][4]高小平.中国智能家居的现状及其发展趋势[门].电器与能效管理技术,2005(4) : 18-21。
-
[7] 郝志芃.我国智能家居现状及未来发展趋势探析[J]. 科技展望, 2017(03).
-
[8] 王朝玉.基于物联网的智能家居控制系统设计[J]. 智能应用, 2017(01).
-
[9]庄建辉,金光,江先亮.MQTT协议消息推送应用于海岛物联网的设计与实现[J].数据通信.2018(4):1-3.42.
-
[10]SHAOS,PIPATTANASOMPORNM,RAHMA.Developmentofphysical-baseddemandrespoe
Original: https://blog.csdn.net/qq_39154376/article/details/128229301
Author: 云炬学长
Title: 安卓APP源码和报告——音乐播放器
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816166/
转载文章受原作者版权保护。转载请注明原作者出处!