基于存储卡音乐播放器V0.1实训日志
实现步骤:
1. 创建安卓应用【SDCardMusicPlayerV0.1】
2. 将MP3音频文件存放到存储卡指定位置 在安卓安装目录SDK下的tools目录找到monitor.bat文件
双击文件图标,启动DDMS
找到Music目录
因为我的文件没有权限,所以需要给他开启文件权限,才可以打开
进入CMD,输入命令,开启权限
3. 将图片拷贝到Drawable目录下,并创建按钮背景图片选择器
4.主布局资源文件activity_main.xml
5.在项目清单文件中授权读外置存储卡
6.主界面类 — MainActivity
查看源代码:`
package net.lhf.sdcard_musicplayer_v01;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
/**
* 功能:基于存储卡音乐播放器V0.1
* 作者:李红芙
* 日期:2020年12月31日
*/
public class MainActivity extends AppCompatActivity {
private MediaPlayer mp;//媒体播放器
private File musicDir;//音乐存放目录
private String musicName;//音乐文件名
private TextView tvMusicName;//音乐名标签
private Button btnPlayOrPause;//播放|暂停
private int currentPosition;//音乐当前的播放位置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//利用资源文件设置用户界面
setContentView(R.layout.activity_main);
//通过资源标识符获取控件实例
tvMusicName = findViewById(R.id.tvMusicName);
btnPlayOrPause = findViewById(R.id.btnPlayOrPause);
// 定义存储读写权限数组
String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
// 检查是否有读权限
int permission = ActivityCompat.checkSelfPermission(this, PERMISSIONS_STORAGE[0]);
// 如果没有授权,那么就请求读权限
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, 0);
}
//获取音乐文件存放目录
musicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
try {
//获取音乐文件存放目录里的第一首音乐文件名
musicName = musicDir.list()[0];
//设置音乐名标签,要去掉扩展名
tvMusicName.setText("音乐名:"+musicName.substring(0,musicName.lastIndexOf(".")));
} catch (Exception e) {
Toast.makeText(this,"存储卡Mus目录里没有音乐文件!",Toast.LENGTH_SHORT).show();
}
//实例化媒体播放器
mp = new MediaPlayer();
//给媒体播放器注册完成监听器
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//提示用户当前音乐播放完毕
Toast.makeText(MainActivity.this,"当前音乐播放完毕!",Toast.LENGTH_SHORT).show();
//当前播放位置清零
currentPosition = 0;
//按钮图标由【暂停】图标切换到【播放】图标
btnPlayOrPause.setBackgroundResource(R.drawable.play_button_selector);
}
});
}
/**
* 播放方法
*/
private void play() throws IOException {
//重置媒体播放器
mp.reset();
//设置播放源(完整音乐名 = 音乐目录 + 音乐名)
mp.setDataSource(musicDir.getAbsolutePath()+"/"+musicName);
//缓冲播放源(从存储卡加载到内存)
mp.prepare();
//定位到暂停时的播放位置
mp.seekTo(currentPosition);
//启动音乐的播放
mp.start();
//按钮图标由【播放】图标切换到【暂停】图标
btnPlayOrPause.setBackgroundResource(R.drawable.pause_button_selector);
}
/**
* 暂停播放
*/
private void pause(){
//暂停播放
mp.pause();
//保存音乐播放的当前位置
currentPosition = mp.getCurrentPosition();
//按钮图标由【暂停】图标切换到【播放】图标
btnPlayOrPause.setBackgroundResource(R.drawable.play_button_selector);
}
/**
* 播放|暂停按钮单击事件处理方法
* @param view
*/
public void doPlayOrPause(View view) throws IOException {
//判断音乐是否在播放
if(mp.isPlaying()){
//暂停播放
pause();
}else {
//播放音乐
play();
}
}
/**
* 销毁回调方法,释放资源
*/
@Override
protected void onDestroy() {
super.onDestroy();
//判断音乐是否在播放
if (mp.isPlaying()){
mp.stop();
}
//释放媒体播放器
mp.release();
//销毁媒体播放器
mp=null;
}
}
7.点击运行,查看效果
8.第一阶段总结
这次实训是老师带着我们一步一步实现的,第一阶段没有太大难度,跟上老师的节奏,就很快完成了,在做这个第一阶段的时候唯一遇到的问题就是把音乐放进存储卡目录MUsic中,刚开始我没有找到Music目录,我也尝试了开启它的权限,但是只还是没打开,最后是下课休息的时候,我去问老师,才解决了这个问题,我的权限不够高,就打开不了那个目录的阅读权限,老师用了adb root打开了更高级的权限,帮我解决了这个问题,虽然这个问题很小,但是通过自己解决,在去问老师这个过程,就让我对这个小问题印象深刻了,以后遇到这样的问题也知道该怎么解决了。