无法播放本地文件系统中的音乐,但可以播放SD卡

时间:2014-11-15 17:12:54

标签: 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是否因此而格式不正确?

1 个答案:

答案 0 :(得分:0)

我开始工作了!

首先,您需要获取音乐文件夹的路径,如下所示:

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

然后您可以将文件名附加到音乐文件夹中:

String file = path + "ThatOneSong.mp3";

然后正常播放。 (或者你可以在一条长线上做到这一点,但这有点混乱。)