java - 无法从本地文件系统播放音乐,但可以从SD卡播放

标签 java android audio

我正在开发一个测试应用程序,除了播放音乐外别无其他。该应用程序的原理是,通常您需要一个音乐播放器,该音乐播放器需要花很长时间才能加载,并且具有所有其他小工具和小玩意,而没人或至少不是您会使用。这个程序只播放音乐,周期。它几乎立即加载。

但是我得到了一些有趣的东西。我需要为用户找到一种从文件系统中选择歌曲的方法,但是我还没有解决这个问题,因此我正在使用固定的歌曲URI进行播放。当我将这首歌曲放在本地文件系统(即/storage/emulated/0/Music/SongName.mp3)上时,按播放按钮时应用程序崩溃。但是,当我将歌曲放在SD卡上(即/storage/extSdCard/Music/SongName.mp3)时,它可以正常运行。

好吧,我可以使用它,但是我不知道它如何或为什么起作用。通常,我会很惊讶并且不再触摸那段代码,这样它才能继续工作,但是这次我正在学习Android上的编程,我想知道为什么它起作用。

这是从SD卡播放的代码(有效):

p = new MediaPlayer();
p.setAudioStreamType(AudioManager.STREAM_MUSIC);
p.setDataSource(getApplicationContext(), Uri.fromFile(new File("/storage/extSdCard/Tests/Take Back The Night.mp3")));
p.prepare();
p.start();

这是从本地fs播放的代码(不起作用):
p = new MediaPlayer();
p.setAudioStreamType(AudioManager.STREAM_MUSIC);
p.setDataSource(getApplicationContext(), Uri.fromFile(new File("/storage/emulated/0/Music/heybrother.mp3")));
p.prepare();
p.start();

如您所见,它几乎是相同的,因此我得出结论,URI中可能存在错误。但是我看不到任何错字,因此我多次打了错。 URI是否为此格式错误?

最佳答案

我知道了!

首先,您需要像下面这样获取音乐文件夹的路径:

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
              .getPath() + "/";

然后,您可以在音乐文件夹中添加文件名:
String file = path + "ThatOneSong.mp3";

然后正常播放。 (或者您可以排很长的距离来执行此操作,但这有点混乱。)

关于java - 无法从本地文件系统播放音乐,但可以从SD卡播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26948431/

相关文章:

java - 如何在java中的文本区域显示输出

java - 如何在泛型方法中调用类的构造函数?

android - 在 Android 中转换为 Dalvik 格式失败并出现错误 1

ios - 检测 UIWebview 何时开始播放音频

java - 使用Regex Java从文件中获取所有IP地址

java - 什么是NullPointerException,我该如何解决?

java - 改变 Activity 方向的填充

android - ZXing 将位图转换为二进制位图

python - 通过pygame.sndarray播放正弦波时出错

python - 如何将梅尔频谱图转换为对数缩放梅尔频谱图