有两个问题.
问题1
您无法以这种方式引用projects / res / raw目录中的资源.项目目录中的文件“/res/raw/sonar_slow.mp3”未存储在apk中的“/res/raw/sonar_slow.mp3”中.而不是以下:
MediaPlayer mp = MediaPlayer.create(this);
mp.setSource("sonar_slow");
你需要使用
MediaPlayer mp = MediaPlayer.create(this, R.raw.sonar_slow);
问题2
以下是错误的:它调用一个不修改播放器的静态方法.
player.create(this, R.raw.sonar_slow);
你应该打电话
player = MediaPlayer.create(this, R.raw.sonar_slow);
完整解决方案
下面是一个可重复使用的AudioPlayer类,它封装了MediaPlayer.这在“Android编程:大书呆子牧场指南”中略有修改.它确保记住清理资源
package com.example.hellomoon;
import android.content.Context;
import android.media.MediaPlayer;
public class AudioPlayer {
private MediaPlayer mMediaPlayer;
public void stop() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
public void play(Context c, int rid) {
stop();
mMediaPlayer = MediaPlayer.create(c, rid);
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
stop();
}
});
mMediaPlayer.start();
}
}