安卓APP源码和报告——音乐播放器
创始人
2024-03-15 04:01:28
0

     

院 系:
专 业:
题 目:
科 目:
学 生:
指导教师:
完成时间:

目 录

1. 引言1

1.1 目的1

1.2 背景1

2. 需求分析1

3. 系统设计1

3.1总体设计1

3.2功能设计1

4. 系统开发2

4.1源程序清单2

4.2功能实现2

5. 系统测试2

5.1测试方法2

5.2测试实现2

5.3测试结果2

6. 结论与心得2

7. 参考文献3

  1. 引言
    1.1 目的
    该APP实现了播放音乐MV的功能,连接在包中导入数据库,可上传大量的音乐MV供使用者欣赏,使用前需要进行注册登录获取自己的账号密码,可直接从一个音乐MV跳转到下一个音乐MV,随意调整视频进度等功能。
    1.2 背景
    在人们繁忙的生活中,一天之余我们都需要休息,可以通过此款音乐播放器听音乐,播放音乐,看音乐MV,让人们生活得到放松。
  2. 需求分析
  3. 当人们疲惫时,可以通过听音乐缓解。
  4. 当人们闲暇时,可以听音乐放松心情。
  5. 当人们快乐时,可以听音乐一起快乐。
  6. 当人们悲伤时,可以听音乐疗伤。
  7. 当人们生气时,可以听音乐消气。
  8. 系统设计
    3.1总体设计
    1.基本的手机显示界面
    2.用户的注册
    3.用户登录
    4.用户进入音乐播放器
    5.点击列表中想要播放的音乐
    6.跳转到音乐MV界面播放
    7.用户可以暂停音乐,播放音乐,随意跳动进度条,上一首音乐,下一首音乐。
    3.2功能设计

  1. 系统开发

4.1源程序清单

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 {
List

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();
}
});
}
}

  1. 系统测试
    5.1测试方法
    使用安卓手机或虚拟机将写完的项目跑入,看运行结果。
    5.2测试实现
    1.实现用户注册,将账号密码存储进数据库中。
    2.实现用户登录
    3.实现音乐列表显示
    4.实现点击相关音乐跳转到播放音乐以及音乐MV界面
    5.实现音乐暂停,切换,跳转,上一首,下一首。
    5.3测试结果


2.


3.


4.


5.


6.


7.

  1. 结论与心得
    通过本次Android项目——音乐播放器,让我对Android有了更深入的理解,对Android代码有了更加清晰的逻辑性。写完音乐播放器这个项目,让我觉得编写Android是一个很有趣的事情。通过自学和听课,我学会了如何完成一个项目,在今后的学习中,也会更加积极。
    参考文献
  2. [1] 张逸飞,严张凌.基于Android的智能家居客户端开发[J].信息与电脑(理论版),2020,32(13),63-65.
  3. [2] 吴红梅,李慧.基于Android的智能家居系统开发[J]. 科技展望,2017,(04):21.
  4. [3] 陈国童,邱兴阳.基于WIFI的Android手机智能家居控制[J],辽宁大学学报(自然科学版),2020,47(1),36-37.
  5. [4] 王宏博.计算机软件设计的原则分析[J],数码世界,2018(7),1.
  6. [5] 徐连成.基于Labview智能家居控制系统设计与仿真[J].电子技术与软件工程,2020(15):76-78.
  7. [6][4]高小平.中国智能家居的现状及其发展趋势[门].电器与能效管理技术,2005(4) : 18-21。
  8. [7] 郝志芃.我国智能家居现状及未来发展趋势探析[J]. 科技展望, 2017(03).
  9. [8] 王朝玉.基于物联网的智能家居控制系统设计[J]. 智能应用, 2017(01).
  10. [9]庄建辉,金光,江先亮.MQTT协议消息推送应用于海岛物联网的设计与实现[J].数据通信.2018(4):1-3.42.
  11. [10]SHAOS,PIPATTANASOMPORNM,RAHMA.Developmentofphysical-baseddemandrespoe

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...