我正在使用一本名为Android无线应用程序开发第2版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 15中传输mp3文件,我将非常感激。
答案 0 :(得分:0)
我认为你必须做更多的事情。 Here是做你想做的事的一个例子:
答案 1 :(得分:0)
网址标题content-type
可能不好。
您可以尝试以下语法:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(URL_OF_FILE);
mp.prepare();
mp.start();
查看NullPointerException
是否仍然存在。
您还可以查看更新的tutorial on this particular subject。
答案 2 :(得分:0)
就像添加这一行一样简单:
<uses-permission android:name="android.permission.INTERNET" />
到清单文件!