【发布时间】:2017-06-11 17:28:21
【问题描述】:
美好的一天!像往常一样 - 我开始学习 Android 编程,在尝试创建基本的 MediaPlayer 应用程序时遇到了意想不到的困难。音频文件存储在 res/raw 中。它通过 create() 访问。我已经阅读了一些关于如何构建媒体播放器应用程序的手册,并且确信如果文件存储在资源/原始文件夹。所以这是我的初始代码
private MediaPlayer playerM = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button playButton = (Button) findViewById(R.id.playButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playMusic(R.raw.sleep_away);
}
});
Button stopButton = (Button) findViewById(R.id.pauseButton);
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopMusic();
}
});
}
private void playMusic(int rid) {
playerM.create(this, rid);
playerM.start();
}
private void stopMusic() {
playerM.stop();
}
}
从那以后我做了很多改变,但没有任何帮助。根据 MediaPlayer 上的 dev.android 手册,上面的代码应该可以工作。但是,它会导致以下错误:
E/MediaPlayer: start called in state 1, mPlayer(0x0)
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)
可能我只是犯了一些直截了当的错误。任何帮助将不胜感激。
【问题讨论】:
-
您忘记在
MediaPlayer上致电prepare()? -
据说
create()已经做了prepare() -
是的,你是对的。但是一些与你的问题相同的答案说你需要打电话准备。试一试。
-
已经试过了。它导致 IllegalStateException
-
好吧,您也可以尝试另一种方法,不使用
MediaPlayer.create(),而是使用数据源对其进行初始化