确定在Android中的MediaPlayer.create中使用的Context变量

时间:2013-07-09 21:39:55

标签: android service uri mp3 android-context

Android中MP3流MediaPlayer的疑难问题。我已经完成了一些应用程序,但现在我重构代码原因有些原因。

在Player的活动中有一个服务调用:

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中的新内容,上下文非常抽象,类文档本身并没有说明它。

我尝试过很多选择,但我需要合理的理由来解释为什么要使用它以及如何确定应用停止的原因。

  1. getApplicationContext()
  2. getBaseContext()
  3. this
  4. PlayerActivity.this
  5. 和其他人。但不理解它是不对的。也许错误在另一个地方。 但没有服务电话,一切都在运作。

1 个答案:

答案 0 :(得分:3)

我同意Context以及何时使用哪种方式可能难以掌握。根据我的经验,在大多数情况下,通常最好使用Activity的{​​{1}}。这些是我的想法,如果我对例子/事实的错误,请有人纠正我。

  

如何确定我应该在第一个Context参数中使用什么?它取决于我称之为.playSong(Context,Uri)的位置吗?如果是,怎么样?

是的而不一定。根据我的阅读,您希望使用最接近需要它的Context的{​​{1}} ...使用所需的最小Context

  1. 如果您从Object拨打电话,Context将在Activity被销毁后被销毁,请使用Object Activity(此处{{ 1}})。
  2. 如果您要拨打的服务有自己的Activity,请使用Context的{​​{1}}。
  3. 如果需要访问系统服务等内容,请使用Player.this
  4. 你说你已经阅读过有关使用Context的文章,因为我不知道哪些文章我不会发布一堆链接。然而,

    Here is a good SO answer about using getApplicationContext()

      

    也许错误发生在另一个地方。

    如果您发布了正在收到的错误,那么我们可以帮助您更好地找到错误