公司改名字重新备案网站会停吗,网站部署 模板,wordpress 文章静态,wordpress 网址导航这个项目适合刚刚学习Android studio的初学者#xff0c;实现音视频的基本播放功能#xff0c;各项功能的页面都做的比较简单#xff0c;特别适用于初学者#xff0c;其特点在于本项目抛开了各种花里胡哨的制作#xff0c;以最接近初学者的样式画面呈现#xff0c;完全不…这个项目适合刚刚学习Android studio的初学者实现音视频的基本播放功能各项功能的页面都做的比较简单特别适用于初学者其特点在于本项目抛开了各种花里胡哨的制作以最接近初学者的样式画面呈现完全不用担心被质疑套用别人的项目要是实在追求完美的话本文末尾也附上了经过美化后的相同项目链接。
基于Android Studio的音视频播放系统设计与实现
一、问题描述
音视频播放系统包括使用sqlite创建数据库用于存储用户信息、启动效果、用户注册、用户登录、显示用户信息、音乐播放、视频播放等功能。
二、功能描述
设计一个音视频播放器app使之能够实现以下功能
创建一个数据库用于存储用户信息。启动效果该App设计了启动页面启动后倒计时3s后可进入app。用户登录注册该App提供用户登录和注册功能用户可以创建新账户或使用现有账户登录。当用户注册完成后跳转回到登录页面进行用户登录。用户需要提供有效的用户名和密码进行身份验证。显示用户信息用户登录后可点击信息按钮查看用户信息包括历史登录用户的用户信息。音乐播放功能用户登录后可以通过该App浏览和播放音乐文件。App提供音乐列表用户可以浏览并选择要播放的音乐。点击音乐后将跳转到音乐播放页面可进行音乐的播放、暂停、上一曲和下一曲以及拖动进度条来控制音乐播放。 视频播放功能该App还提供视频播放功能。用户可以通过App浏览并选择要播放的视频文件。点击视频后跳转到音乐播放页面可以控制视频播放和暂停。
三、功能实现
项目目录 1.创建数据库建立一个用户表表结构如下 2.实现app启动页面页面效果如下 3.实现用户登录功能用户需要提供有效的用户名和密码否侧提示用户名无效或密码无效 4.实现用户注册功能点击注册按钮跳转至用户注册页面用户注册成功跳转回用户登录页面进行用户登录 5.显示历史登录用户信息功能登录成功后点击信息后跳转至用户信息显示界面用户可查看历史登录用户信息。 6.实现音乐播放功能登录成功后默认显示音乐列表点击音乐后跳转至音乐播放界面用户可通过点击播放按钮进行音乐的播放、暂停、上一曲和下一曲操作同时用户也可以通过拖动进度条控制音乐的播放进度 7.实现视频播放功能在默认页面点击视频按钮后跳转至视频列表点击视频可进入视频播放页面用户可通过点击播放、暂停、继续播放按钮对视频进行播放控制。 四、源代码
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() 1) {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(secondsRemainings);}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; Overrideprotected 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() {Overridepublic 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() {Overridepublic void onClick(View v) {Intent intent new Intent(LoginActivity.this, RegisterActivity.class);startActivityForResult(intent,1);}});}Overrideprotected 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
?xml version1.0 encodingutf-8?
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.WelcomeActivityTextViewandroid:idid/tv_countdownandroid:layout_width100dpandroid:layout_height60dpandroid:layout_alignParentRighttrueandroid:layout_alignParentBottomtrueandroid:layout_marginRight6dpandroid:layout_marginBottom89dpandroid:backgroundcolor/Blueandroid:gravitycenterandroid:text3sandroid:textSize30dp /ImageViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:srcmipmap/action /
/RelativeLayout
activity_login.xml
?xml version1.0 encodingutf-8?
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:backgroundcolor/Whiteandroid:orientationverticalImageViewandroid:idid/ivandroid:layout_widthmatch_parentandroid:layout_height30dpandroid:layout_centerHorizontaltrueandroid:layout_marginTop0dpandroid:backgroundcolor/Black/LinearLayoutandroid:idid/accountandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_belowid/ivandroid:layout_centerVerticaltrueandroid:layout_marginBottom5dpandroid:layout_marginLeft10dpandroid:layout_marginRight10dpandroid:layout_marginTop40dpandroid:orientationhorizontalTextViewandroid:idid/tv_accountandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:padding10dpandroid:text账 号android:textColor#000android:backgrounddrawable/text_styleandroid:textSize25sp /Viewandroid:layout_width1dpandroid:layout_heightmatch_parentandroid:backgroundcolor/Gray/EditTextandroid:idid/et_accountandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:backgrounddrawable/edit_styleandroid:hint请输入账号android:textColorcolor/Grayandroid:textSize20spandroid:gravitycenterandroid:inputTypetextandroid:padding10dp //LinearLayoutLinearLayoutandroid:idid/passwordandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_belowid/accountandroid:layout_centerVerticaltrueandroid:layout_marginLeft10dpandroid:layout_marginRight10dpandroid:orientationhorizontalTextViewandroid:idid/tv_passwordandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:padding10dpandroid:text密 码android:backgrounddrawable/text_styleandroid:textColor#000android:textSize25sp/Viewandroid:layout_width1dpandroid:layout_heightmatch_parentandroid:backgroundcolor/Gray/EditTextandroid:idid/et_passwordandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:layout_toRightOfid/tv_passwordandroid:hint请输入密码android:textColorcolor/Grayandroid:textSize20spandroid:gravitycenterandroid:backgrounddrawable/edit_styleandroid:inputTypetextPasswordandroid:padding10dp//LinearLayoutButtonandroid:idid/btn_loginandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_marginTop40dpandroid:layout_marginLeft10dpandroid:layout_marginRight10dpandroid:backgrounddrawable/button_styleandroid:gravitycenterandroid:text登录android:textColor#ffffffandroid:textSize30spandroid:layout_belowid/password/Buttonandroid:idid/btn_registerandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_marginTop20dpandroid:layout_marginLeft10dpandroid:layout_marginRight10dpandroid:backgrounddrawable/button_styleandroid:gravitycenterandroid:text注册android:textColor#ffffffandroid:textSize30spandroid:layout_belowid/btn_login /
/RelativeLayout
总结在这次基于Android Studio的音视频播放系统设计与实现的课程设计中我不仅掌握了一系列关键技术和工具还对整个项目开发流程有了更深入的理解。熟悉并掌握了Android Studio的开发环境包括如何设置、配置项目以及使用内置的工具如模拟器进行测试。深入了解了Android SDK和相关API特别是与音视频播放相关的部分如MediaPlayer、VideoView等。
此外这次实验中我还遇到一些数据传递中断问题所以我还查看了一些使用断电调试的方法也是得我掌握了一些关于断点调试的有关用法这也让我意识到断点调试与良好的代码组织和注释习惯是相辅相成的。一个清晰、有良好注释的代码结构使得断点调试更为有效因为你可以快速了解每一部分代码的作用和相互关系。
通过这次课程设计我不仅提高了技术能力更重要的是学会了如何综合运用这些技术来解决实际问题。
由于篇幅限制此处就只放了部分代码其实也还够用有需要的尽可拿去用。另外在这里附上这个项目的完整代码链接https://download.csdn.net/download/weixin_74924162/89248276。
这里分享一个做了页面美化的版本链接给有需要的伙伴Android studio音频视频播放器课程设计继上一个项目这里做了稍许的美化改动以及部分功能的改动-CSDN博客