我正在开发一款除了播放音乐之外别无其他功能的测试应用。这个应用程序背后的想法是,通常你有一个音乐播放器需要很长时间才能加载,并拥有所有那些没有人,或者至少不是你使用的额外小工具和小玩意儿。这个应用程序只播放音乐,期间。它几乎立即加载。
但我有一些有趣的东西。我需要找到一种让用户从文件系统中选择一首歌的方法,但是我还没有工作,所以我使用固定的歌曲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是否因此而格式不正确?
答案 0 :(得分:0)
我开始工作了!
首先,您需要获取音乐文件夹的路径,如下所示:
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
.getPath() + "/";
然后您可以将文件名附加到音乐文件夹中:
String file = path + "ThatOneSong.mp3";
然后正常播放。 (或者你可以在一条长线上做到这一点,但这有点混乱。)