我正在使用一本名为 Android Wireless Application Development 2nd edition 2009 (L.Darcey & S.Conder,由 Addison Wesley 出版(的书作为我目前正在学习的 Android 应用程序开发课程的文献。在本书的第三章中,你将使用 MediaPlayer 类启动一个媒体播放器对象,以使用下面的此方法将 mp3 文件流式传输到你的应用。
public void playMusicFromWeb() {
try {
Uri file = Uri.parse("http://downloads.bbc.co.uk/podcasts/6music/adamandjoe/adamandjoe_20111231-1430a.mp3");
mp = MediaPlayer.create(this, file);
mp.start();
}
catch (Exception e) {
Log.e(DEBUG_TAG, "Player failed", e);
}
}
快乐的日子,这一切都在 API 8 中运行良好(这是本书使用的(。但是,尝试在更高的 API 中使用此方法,尤其是 15,它是(在编写时(可用的最新 API,我抛出了一个NullPointerException
。调试让我一点也不明智,因为 file
变量似乎可以很好地保存字符串值,但它不会转换为功能性 mp3 流。我已经使用prepare(); prepareAsync(); setDataSource(); reset();
等尝试了各种不同的方法,但似乎没有任何效果。你会认为我的老师能够帮助我,但他们显然也不知道该怎么做。我现在假设这种流式传输方式在高于 8 的 API 中必须过时。如果有人能阐明如何在 API 3 中流式传输 mp15 文件,我将不胜感激。
我认为你必须做的不止这些。下面是执行所需操作的示例:
-
标头对 URL 的
content-type
可能不正确。 -
您可以尝试以下语法:
MediaPlayer mp = new MediaPlayer(); mp.setDataSource(URL_OF_FILE); mp.prepare(); mp.start();
查看
NullPointerException
是否仍然存在。 -
您还可以查看有关此特定主题的最新教程。
就像添加这一行一样简单:
<uses-permission android:name="android.permission.INTERNET" />
到清单文件!