0

我正在使用一本名为 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 15 中流式传输 mp3 文件,我将不胜感激。

4

3 回答 3

0

我认为你必须做的不止这些。是一个做你想做的事的例子:

于 2012-05-03T12:23:38.970 回答
0
  1. URL的标头content-type可能不好。

  2. 你可以试试这个语法:

    MediaPlayer mp = new MediaPlayer();
    mp.setDataSource(URL_OF_FILE);
    mp.prepare();
    mp.start();
    

    看看有没有NullPointerException遗体。

  3. 您还可以查看有关此特定主题的更新教程

于 2012-05-03T12:26:44.870 回答
0

就像添加这一行一样简单:

<uses-permission android:name="android.permission.INTERNET" />

到清单文件!

于 2012-05-09T16:45:15.170 回答