Android Studio音频视频播放器课程设计

2024-06-04 7455阅读

这个项目适合刚刚学习Android studio的初学者,实现音视频的基本播放功能,各项功能的页面都做的比较简单,特别适用于初学者,其特点在于本项目抛开了各种花里胡哨的制作,以最接近初学者的样式画面呈现,完全不用担心被质疑套用别人的项目,要是实在追求完美的话,本文末尾也附上了经过美化后的相同项目链接。

姓名:阿三                              学院:信息工程学院

专业:软件工程                             学号:2111111111

任务起止日期:2023.12.27-2024.1.2

课程设计题目:基于Android Studio的音视频播放系统设计与实现

一、问题描述

音视频播放系统包括:使用sqlite创建数据库用于存储用户信息、启动效果、用户注册、用户登录、显示用户信息、音乐播放、视频播放等功能。

二、功能描述

设计一个音视频播放器app,使之能够实现以下功能:

  1. 创建一个数据库用于存储用户信息。
  2. 启动效果:该App设计了启动页面,启动后倒计时3s后可进入app。
  3. 用户登录注册:该App提供用户登录和注册功能,用户可以创建新账户或使用现有账户登录。当用户注册完成后跳转回到登录页面进行用户登录。用户需要提供有效的用户名和密码进行身份验证。
  4. 显示用户信息:用户登录后可点击信息按钮查看用户信息,包括历史登录用户的用户信息。
  5. 音乐播放功能:用户登录后,可以通过该App浏览和播放音乐文件。App提供音乐列表,用户可以浏览并选择要播放的音乐。点击音乐后,将跳转到音乐播放页面,可进行音乐的播放、暂停、上一曲和下一曲以及拖动进度条来控制音乐播放。
  6.  视频播放功能:该App还提供视频播放功能。用户可以通过App浏览并选择要播放的视频文件。点击视频后,跳转到音乐播放页面,可以控制视频播放和暂停。

三、功能实现

项目目录:

Android Studio音频视频播放器课程设计 第1张Android Studio音频视频播放器课程设计 第2张

1.创建数据库,建立一个用户表,表结构如下:

Android Studio音频视频播放器课程设计 第3张

2.实现app启动页面,页面效果如下:

Android Studio音频视频播放器课程设计 第4张

3.实现用户登录功能,用户需要提供有效的用户名和密码,否侧提示用户名无效或密码无效:

Android Studio音频视频播放器课程设计 第5张

4.实现用户注册功能,点击注册按钮跳转至用户注册页面,用户注册成功跳转回用户登录页面进行用户登录:

Android Studio音频视频播放器课程设计 第6张

5.显示历史登录用户信息功能,登录成功后,点击信息后,跳转至用户信息显示界面,用户可查看历史登录用户信息。

Android Studio音频视频播放器课程设计 第7张

6.实现音乐播放功能,登录成功后,默认显示音乐列表,点击音乐后,跳转至音乐播放界面,用户可通过点击播放按钮进行音乐的播放、暂停、上一曲和下一曲操作,同时用户也可以通过拖动进度条控制音乐的播放进度:

Android Studio音频视频播放器课程设计 第8张Android Studio音频视频播放器课程设计 第9张

7.实现视频播放功能,在默认页面点击视频按钮后,跳转至视频列表,点击视频可进入视频播放页面,用户可通过点击播放、暂停、继续播放按钮对视频进行播放控制。

Android Studio音频视频播放器课程设计 第10张Android Studio音频视频播放器课程设计 第11张

四、源代码

1.用户类定义User.java

package and.yjg.music_app.Login;
public class User {
    public User() {
    }
    public User(String account, String password, String phone, String address) {

        this.account = account;

        this.password = password;

        this.phone = phone;

        this.address = address;
    }
    public String account;

    public String password;

    public String phone;

    public String address;

    public String getAccount() {

        return account;
    }

    public void setAccount(String account) {

        this.account = account;
    }

    public String getPassword() {

        return password;
    }

    public void setPassword(String password) {

        this.password = password;
    }

    public void setPhone(String phone) {

        this.phone = phone;
    }

        public void setAddress(String address){

            this.address = address;
        }

        public String toString () {

            return "用户名:" + account + "\n" +

                    "密码:" + password + "\n " +

                    "电话:" + phone + "\n " +

                    "地址:" + address + "\n";
        }
    }

2.UserDao.java

package and.yjg.music_app.Login;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import and.yjg.music_app.DataBaseHelper;
public class UserDao {

    private Context context;       
    private DataBaseHelper dbHelper;
    private SQLiteDatabase db;   
    public UserDao(Context context) {

        this.context = context;
    }
    public void open() throws SQLiteException {

        dbHelper = new DataBaseHelper(context);

        try {

            db = dbHelper.getWritableDatabase();
        } catch (SQLiteException exception) {

            db = dbHelper.getReadableDatabase();
        }
    }
    public void close() {

        if (db != null) {

            db.close();

            db = null;
        }
    }
    public void addUser(User user) {

        ContentValues values = new ContentValues();

        values.put("account", user.account);

        values.put("password", user.password);

        values.put("phone", user.phone);

        values.put("address", user.address);

        db.insert("user", null, values);
    }
    public void deleteUser(User user) {

        db.delete("user", "account = ?", new String[]{user.account});
    }
    public void update(User user) {

        ContentValues values = new ContentValues();

        values.put("password", user.password);

        db.update("user", values, "account = ?", new String[]{user.account});
    }
    public boolean find(User user) {
        Cursor cursor = db.query("user", null, "account = ?", new String[]{user.account}, null, null, null);

        if (cursor == null || cursor.getCount()

            return false;
        }

        if (cursor.moveToFirst()) {

            do {
                String acc = cursor.getString(cursor.getColumnIndex("account"));

                String pass = cursor.getString(cursor.getColumnIndex("password"));

                String pho = cursor.getString(cursor.getColumnIndex("phone"));

                String addr = cursor.getString(cursor.getColumnIndex("address"));

                Log.d("UserDao", "user account is" + acc);

                Log.d("UserDao", "user password is " + pass);

                Log.d("UserDao", "user phone is " + pho);

                Log.d("UserDao", "user address is " + addr);
            } while (cursor.moveToNext());
        }

        cursor.close();

        return true;
    }
    public boolean isExist(String account) {

        Cursor cursor = db.query("user", null, "account = ?", new String[] {account}, null, null, null);

        return cursor != null && cursor.getCount() > 0;
    }
    public String getPassword(String account) {

        Cursor cursor = db.query("user", null, "account = ?", new String[] {account}, null, null, null);

        cursor.moveToFirst();

        String password = cursor.getString(cursor.getColumnIndex("password"));

        return password;
    }

3.启动效果WelcomeActivity.java

package and.yjg.music_app; 
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import Login.LoginActivity;
public class WelcomeActivity extends AppCompatActivity {

    private TextView tvCountdown;

    private CountDownTimer countDownTimer;

    private long timeLeftInMillis = 3000;

    protected void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        tvCountdown = findViewById(R.id.tv_countdown);
        startCountdown();
    }

    private void startCountdown() {

        countDownTimer = new CountDownTimer(timeLeftInMillis,1000){

            public void onTick(long millisUntilFinished){

                timeLeftInMillis = millisUntilFinished;

                int secondsRemaining = (int) (millisUntilFinished/1000);

                tvCountdown.setText(secondsRemaining+"s");
            }

            public void onFinish(){
                startActivity(new Intent(WelcomeActivity.this, LoginActivity.class));
                finish();
            }
        }.start();
    }
protected  void onDestroy(){

        super.onDestroy();

        if (countDownTimer != null){

            countDownTimer.cancel();
        }
    }
}

4.用户登录LoginActivity.java

package Login;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import and.yjg.music_app.MainActivity;
import and.yjg.music_app.R;
public class LoginActivity extends AppCompatActivity {

    private Button btn_login;    
    private Button btn_register;
    private EditText et_account;
    private EditText et_password;
    private UserDao dao;        
    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
    }

    public void initView() {
        ActionBar actionBar = getSupportActionBar();

        if(actionBar != null){

            actionBar.hide();
        }
        btn_login = findViewById(R.id.btn_login);

        btn_register = findViewById(R.id.btn_register);

        et_account = findViewById(R.id.et_account);

        et_password = findViewById(R.id.et_password);
        btn_login.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                String acc = et_account.getText().toString().trim();

                String pass = et_password.getText().toString().trim();

                dao = new UserDao(getApplicationContext());

                dao.open();

                if (dao.isExist(acc) == false) {

                    Toast.makeText(LoginActivity.this,"账号不存在,请重新输入!", Toast.LENGTH_SHORT).show();
                } else {

                    if (dao.getPassword(acc).equals(pass)) {

                        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                        startActivity(intent);
                        finish();
                    } else {

                        Toast.makeText(LoginActivity.this, "密码错误,请重新输入!", Toast.LENGTH_SHORT).show();
                    }
                }

                dao.close();
            }
        });

        btn_register.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivityForResult(intent,1);
            }
        });
    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data){

        super.onActivityResult(requestCode, resultCode, data);

        if(data != null){
            if(requestCode == 1 && resultCode == 1){

                String name = data.getStringExtra("acc");

                String password = data.getStringExtra("pass");

                et_account.setText(name);

                et_password.setText(password);
            }
        }

五、各类布局文件

  activity_welcom.xml



    
    

  activity_login.xml



    
    
        
        
        
    
    
        
        
        
    
    
    

总结:在这次基于Android Studio的音视频播放系统设计与实现的课程设计中,我不仅掌握了一系列关键技术和工具,还对整个项目开发流程有了更深入的理解。:熟悉并掌握了Android Studio的开发环境,包括如何设置、配置项目,以及使用内置的工具如模拟器进行测试。深入了解了Android SDK和相关API,特别是与音视频播放相关的部分,如MediaPlayer、VideoView等。

此外,这次实验中,我还遇到一些数据传递中断问题,所以我还查看了一些使用断电调试的方法,也是得我掌握了一些关于断点调试的有关用法,这也让我意识到断点调试与良好的代码组织和注释习惯是相辅相成的。一个清晰、有良好注释的代码结构使得断点调试更为有效,因为你可以快速了解每一部分代码的作用和相互关系。

通过这次课程设计,我不仅提高了技术能力,更重要的是学会了如何综合运用这些技术来解决实际问题。

由于篇幅限制,此处就只放了部分代码,其实也还够用,有需要的尽可拿去用。另外在这里附上这个项目的完整代码链接https://download.csdn.net/download/weixin_74924162/89248276​​​​​​。

如果有小伙伴想要源码但是又没有会员的可以评论在下方,找我白嫖。

(因为有多篇文章源码,所以最好是在本文章里评论,我能第一时间知道你要的是哪一个源码,同时也可以点赞收藏加评论啥的给卑微的咱增加点微薄的积分吧,就当是报酬了,提前写过各位看官啦。)

这里分享一个做了页面美化的版本链接给有需要的伙伴:Android studio音频视频播放器课程设计(继上一个项目,这里做了稍许的美化改动以及部分功能的改动)-CSDN博客


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]