android - MediaPlayer在公共静态时不播放

时间:2013-09-11 20:30:10

标签: java android android-mediaplayer

我已经看过很多关于此的帖子,但是我无法让它发挥作用。我只是想用MediaPlayer播放一首简单的歌曲。它不是来自UI的按钮问题,因为我可以验证按钮方法startMusic,并且调用stopMusic。

player.play();和player.stop()什么都不做。

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.*;
import android.media.MediaPlayer;


public class MainActivity extends Activity
{
    private static MediaPlayer player = new MediaPlayer();
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        player.create(MainActivity.this,R.raw.sadsadsad);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    public void changeLabel(View view)
    {
        TextView myTextView = (TextView) findViewById(R.id.myTextView);
        myTextView.setText("Label changed");
    }

    public void playMusic(View view)
    {
        player.start();
    }

    public void stopMusic(View view)
    {
        player.stop();
    }
}

同样,播放和停止按钮工作,断点击中.start()和.stop()。

2 个答案:

答案 0 :(得分:2)

关于停止播放器的评论,而不是再次播放。 当媒体播放器停止时,您需要再次准备()它。 如果你想停止媒体播放器而不必再次准备它我会建议

public void stopMusic(View view)
{
    if(player != null && player.isPlaying())
    {
        player.pause();
        player.seekTo(0);
    }
}

如果查看状态列表here,您应该知道发生了什么。 你也使用静态方法(create(..))从实例(播放器)而不是从类(MediaPlayer)

修改

正如你问的那样。使用MediaPlayer.create(...)是正确的方法,如果你使用像eclipse这样的IDE,它会警告你,因为MediaPlayer.create是一个静态方法,所以应该从类(MediaPlayer)而不是创建的实例中使用它。我不确定如果通过实例完成它是否会导致问题,但我遵循所有警告都是错误的原则,因此我试图保持标准编码约定以防万一。

答案 1 :(得分:1)

不确定这是否有效,因为我对MediaPlayer没有多少经验,但对评论太多了。无论如何,试试

MediaPlayer player;
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad);
}

修改

尝试移动

player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad);

onCreate()以及playMusic()

 public void playMusic(View view)
{
    player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad);
    player.start();
}

我还认为你应该在player.release()中致电stopMusic()。这可能没关系,但我相信它会安全。