
<!-- 允许挂载和反挂载文件系统可移动存储 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 读取外部存储权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
首先实现简单的音乐播放和停止功能
准备: 打开ddms并将音乐放入以下路径

public class MainActivity extends AppCompatActivity {
private Button btnPlay;
private Button btnStop;
//完整路径,开头的“/”不能丢,并且路径严格区分大小写
String musicPath = "/storage/emulated/0/Music/Akia-california.mp3";
private MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InnerOnClickListener listener = new InnerOnClickListener();
btnPlay = findViewById(R.id.btn_play);
btnPlay.setOnClickListener(listener);
btnStop = findViewById(R.id.btn_stop);
btnStop.setOnClickListener(listener);
player = new MediaPlayer();
}
private class InnerOnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_play:
try {
//重置播放工具
player.reset();
//设置需要播放歌曲的路径
player.setDataSource(musicPath);
//准备,即加载歌曲,即缓冲
//歌曲在sd卡中,需要读取到内存里
player.prepare();
//播放
player.start();
} catch (IOException e) {
}
break;
case R.id.btn_stop:
player.stop();
break;
}
}
}
}
在SD卡下遍历文件

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//【目标】扫描sd卡下的Music文件夹,获取所有歌曲信息
//1、获取sdcard下的Music文件夹的File对象
//2、检查Music文件夹是否存在
//3、获取Music文件夹下的文件列表
//4、检查文件列表是否有效
//5、遍历文件列表
//5.1、检查是否是文件
//5.2、检查是否是mp3文件
String musicPath = "/storage/emulated/0/Music/";
File musicDir = new File(musicPath);
if(musicDir.exists()){
Log.d("MUSIC","【信息】文件夹存在");
File[] files = musicDir.listFiles();
if(files != null && files.length>0){
Log.d("MUSIC","【信息】文件夹列表有效");
for(int i=0;i<files.length;i++){
if(files[i].isFile()){
String fileName = files[i].getName();
if(fileName.toLowerCase().endsWith(".mp3")){
Log.d("MUSIC",files[i].getAbsolutePath());
}else{
Log.w("MUSIC","【错误】当前遍历到的不是mp3文件");
}
}else{
Log.w("MUSIC","【错误】当前遍历到的第"+i+"个不是文件");
}
}
}else {
Log.w("MUSIC","【错误】文件夹列表无效");
}
}else{
Log.w("MUSIC","【错误】文件夹不存在");
}
}
}
输出结果

环境类
Environment类是专门用于访问外部存储的实用程序类. 此类提供了一系列静态方法和常量,可轻松访问外部存储.
File getExternalStorage()//获取sdcard的文件对象

File getExternalStoragePublicDirectory(String)//获取sdcard下的默认文件夹,例如Music文件夹的File对象,该参数是Environment类的常量,例如DIRECTORY_MUSIC
不同手机上的sdcard路径不同. 为了确保可以找到sdcard路径,可以将 d>放在上面的栗子中.
String musicPath = "/storage/emulated/0/Music/";
File musicDir = new File(musicPath);
更改
File musicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
String getExternalStorageState(); //获取sdcard的状态. 如果已安装sdcard并可以正常使用达内播放器注册码达内播放器注册码,则返回值应与环境中的常量MEDIA_MOUNTED相匹配
每部手机都有一个sdcard. 无论您的手机是32GB还是64GB,手机都会将这些存储空间分为主存储空间和扩展存储空间. 那么此扩展存储空间就是sdcard,因此sdcard不一定是sdcard. / p>
Sdcard不可用状态. 例如: 当手机连接到计算机时,手机的sdcard不可用,因为两端无法同时对同一个文件进行操作.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-150684-1.html
就要打屁股