0

MediaPlayerAndroid 中MP3 流的棘手问题。我已经用它完成了一些应用程序,但现在由于某些原因我重构了代码。

Player的activity中有一个Service的调用:

mp3Service.playSong(getBaseContext(),url);

playSong 方法包括:

public void playSong(Context c, String url) {
     if (this.currenturl.equals(""))
     {

         this.mplayer = MediaPlayer.create(c, Uri.parse(url));
         this.currenturl=url;
         this.mplayer.start();
     }
     else
        {
        if (!this.currenturl.equals(url))
        {
                this.mplayer.stop();
               //this.mplayer=null; 
                 this.mplayer = MediaPlayer.create(c, Uri.parse(url));
                 this.mplayer.start();
                 this.currenturl=url;

        } else
        {
            if (this.on==false)
            this.mplayer.start();

        };

        };
     this.on=true;
}

playSong当它在ImageView点击监听器上时,对方法的调用正常工作!音乐开始播放。

但是,当仅从玩家活动中调用时onCreate- 它会停止应用程序。不知道为什么,但很难理解在这里使用什么上下文参数。我读过一些类似的文章和文档,但有很多迷雾。

如何确定我应该在这里的第一个 Context 参数使用什么?这取决于我从哪里打电话.playSong(Context, Uri)?如果是,如何?上下文对于 Android 中的 new 来说是非常抽象的,类文档本身并没有说明这一点。

我尝试了很多选择,但我需要合理的理由来使用它以及如何确定应用程序停止的原因。

  1. getApplicationContext()
  2. getBaseContext()
  3. this
  4. PlayerActivity.this

和别的。但是不理解是不对的。也许错误在其他地方。但如果没有服务电话,一切正常。

4

1 回答 1

4

我同意这一点Context以及何时使用哪种可能是一个难以掌握的想法。据我所知,在大多数情况下,通常最好使用你Activity的 's 。Context这些是我对此的想法,如果我对示例/事实有误,请有人纠正我。

如何确定我应该在这里的第一个 Context 参数使用什么?它是否取决于我从哪里调用 .playSong(Context, Uri)?如果是,如何?

是的,不一定。从我读过的内容来看,您想使用Context最接近Object需要它的东西……使用最少Context需要的东西。

  1. 如果你从 an 调用 ifActivity并且Object当它被销毁时将被销毁,Activity那么使用Activity Context(here Player.this)。
  2. 如果您正在调用有自己的服务,Context则使用Service's Context
  3. 如果它需要访问诸如系统服务之类的东西,那么使用getApplicationContext()

你说你已经阅读了关于使用的文章Context,因为我不知道哪些文章我不会发布一堆链接。然而,

这是关于使用 getApplicationContext() 的一个很好的答案

也许错误在其他地方。

如果您发布您遇到的错误,那么也许我们可以帮助您更好地找到错误

于 2013-07-09T22:03:56.623 回答