任何人都可以告诉我为什么这段代码不起作用?它编译但是当我点击按钮时没有播放然后它崩溃了。我是菜鸟= [
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();
}
}
答案 0 :(得分:0)
我可以看到一些问题。
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();
}
}
}