我正在开发一个测试应用程序,除了播放音乐外别无其他。该应用程序的原理是,通常您需要一个音乐播放器,该音乐播放器需要花很长时间才能加载,并且具有所有其他小工具和小玩意,而没人或至少不是您会使用。这个程序只播放音乐,周期。它几乎立即加载。
但是我得到了一些有趣的东西。我需要为用户找到一种从文件系统中选择歌曲的方法,但是我还没有解决这个问题,因此我正在使用固定的歌曲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/