繁体   English   中英

确定要在Android的MediaPlayer.create中使用的上下文变量

[英]Determine what Context variable to use in MediaPlayer.create in Android

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

播放器活动中有一个服务调用:

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;
}

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

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

在这里如何确定第一个Context参数应该使用什么? 是否取决于我从哪里调用.playSong(Context, Uri) 如果是,怎么办? 对于Android中的新功能而言,上下文是非常抽象的,类文档本身并不能说明问题。

我尝试了许多选择,但我需要逻辑上的理由才能使用此功能以及如何确定应用程序为何停止运行。

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

和别的。 但是,如果不了解,那是不对的。 也许错误在另一个地方。 但是没有服务电话,所有人都在工作。

我同意Context以及何时使用哪种类型可能很难理解。 据我了解,通常在大多数情况下最好使用ActivityContext 这些是我对此的想法,如果我对示例/事实有误,请有人纠正我。

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

是的,不一定。 从我的阅读中,您想使用最接近需要它的ObjectContext ...使用所需的最小Context

  1. 如果从打电话,如果ActivityObject时会被破坏Activity被破坏然后使用Activity Context (这里Player.this )。
  2. 如果您要调用的服务具有自己的Context使用ServiceContext
  3. 如果需要访问系统服务之类的东西,请使用getApplicationContext()

您说您已经阅读了有关使用Context文章,并且由于我不知道我不会发布大量链接。 然而,

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

也许错误在另一个地方。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM