【问题标题】:Can't get media player to play mp3无法让媒体播放器播放 mp3
【发布时间】:2014-12-01 07:51:00
【问题描述】:

谁能告诉我为什么这段代码不起作用?它可以编译,但是当我单击该按钮时,什么都没有播放,然后它就崩溃了。我是菜鸟=[

public class MainActivity extends ActionBarActivity {

private MediaPlayer newTune;
    public void playB(View paramView) throws IOException {
    newTune = MediaPlayer.create(this, R.raw.b);

    if (newTune.isPlaying()) {
        // newTune.stop();
    } else {
        newTune.prepare();
        newTune.start();
    }
}

【问题讨论】:

  • 什么不起作用?你的应用程序崩溃了吗?你什么都听不见吗?请向我们提供更多详细信息。
  • 你能提供一些日志打印吗?

标签: java android


【解决方案1】:

我可以看到几个问题。

1.) 您无需致电prepare(),因为create() 已经为您处理好了。

2.) newTune.isPlaying() 总是错误的,因为您刚刚创建了一个新的 MediaPlayer。

来自文档:

http://developer.android.com/reference/android/media/MediaPlayer.html

MediaPlayer.onCreate()...

为给定资源 ID 创建 MediaPlayer 的便捷方法。上 成功,prepare() 已经被调用并且不能被调用 再次调用。

试试这样的:

public class MainActivity extends ActionBarActivity {

private MediaPlayer newTune;
    public void play() {
    newTune = MediaPlayer.create(this, R.raw.b);

    newTune.start();
    }
}

这是一个处理整个事情的更好方法的简单示例:

public class MainActivity extends Activity {

    private MediaPlayer mMediaPlayer;
    private boolean mIsPrepared;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMediaPlayer = MediaPlayer.create(this, R.raw.raw1);
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mIsPrepared = true;
            }
        });

        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playOrPause();
            }
        });
    }

    public void playOrPause() {
        if (mMediaPlayer == null || !mIsPrepared) {
            return;
        }
        if (!mMediaPlayer.isPlaying()) {
            mMediaPlayer.start();
        } else {
            mMediaPlayer.pause();
        }
    }

}

【讨论】:

  • 这是我在 Stackoverflow 上的第一个问题,感谢及时准确的回复 =]
  • 欢迎您,不客气。 :) 有关如何改进 MediaPlayer 播放处理的更详细示例,请参阅我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多