Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从本地文件系统播放音乐,但可以从SD卡播放_Java_Android_Audio - Fatal编程技术网

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

Java 无法从本地文件系统播放音乐,但可以从SD卡播放,java,android,audio,Java,Android,Audio,我正在开发一个测试应用程序,它除了播放音乐什么都不做。这个应用背后的想法是,通常你有一个音乐播放器,需要很长时间才能加载,并且有所有没有人,或者至少没有你,使用的额外小工具和小发明。此应用仅播放音乐,句号。它几乎可以瞬间加载 但我得到了一些有趣的东西。我需要找到一种方法让用户从文件系统中选择一首歌曲,但我还没有做到这一点,所以我使用一个固定的歌曲URI来播放它。当我将这首歌放在本地文件系统(即/storage/emulated/0/Music/SongName.mp3)上时,应用程序在按下播放按

我正在开发一个测试应用程序,它除了播放音乐什么都不做。这个应用背后的想法是,通常你有一个音乐播放器,需要很长时间才能加载,并且有所有没有人,或者至少没有你,使用的额外小工具和小发明。此应用仅播放音乐,句号。它几乎可以瞬间加载

但我得到了一些有趣的东西。我需要找到一种方法让用户从文件系统中选择一首歌曲,但我还没有做到这一点,所以我使用一个固定的歌曲URI来播放它。当我将这首歌放在本地文件系统(即/storage/emulated/0/Music/SongName.mp3)上时,应用程序在按下播放按钮时崩溃。但是,当我把歌曲放在SD卡上时(即/storage/extSdCard/Music/SongName.mp3),它工作得很好

嗯,我让它工作了,但我不知道它是怎么工作的,也不知道为什么。通常我会感到惊讶,不会再碰那段代码,这样它就能继续工作,但这次我在学习Android编程,我想知道它为什么能工作

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

这是从本地fs播放的代码(不起作用):

正如您所看到的,这几乎是一样的,所以我得出结论,URI中可能有错误。但我看不到任何打字错误,我重复了多次。URI的格式是否有误?

我让它工作了

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

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
              .getPath() + "/";
然后,您可以将文件名附加到音乐文件夹中:

String file = path + "ThatOneSong.mp3";
然后像平常一样玩。(或者你可以排一长队,但这有点杂乱。)

p.setDataSource(“/mnt/sdcard/yourdirectory/yourdaudiofile.mp3”);
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
              .getPath() + "/";
String file = path + "ThatOneSong.mp3";