我想要播放一个简单的声音。声音在模拟器上播放但在手机上播放。它说
开始在状态0中调用
和
错误(-38,0)
这是我到目前为止所尝试的内容:
MediaPlayer secondSound;
MediaPlayer minuteSound;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
secondSound = new MediaPlayer();
secondSound = MediaPlayer.create(this, R.raw.everysecondsound);
minuteSound = MediaPlayer.create(this, R.raw.everyminutesound);
secondSound.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer player) {
player.start();
}
});
minuteSound.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer player) {
player.start();
}
});
}
稍后在程序中,调用以下方法:
minuteSound.start();
secondSound.start();
在模拟器上,即使没有.setOnPreparedListener部分也能正常工作。模拟器正在运行API 22,手机正在运行API 19.在较旧的API中使用媒体播放器有不同的方法吗?
答案 0 :(得分:2)
当您致电MediaPlayer.create()
时,会自动为您拨打prepare()
,如the source code所示。根据{{3}}:
state diagram in the MediaPlayer documentation
这会让您进入准备状态。此时,当您致电start()
时,您将进入已启动状态。播放完成后,您将处于播放完成状态。如果您想再次播放声音,则必须再次拨打create()
,或再次拨打stop()
和prepare()
。
答案 1 :(得分:1)
首先,我认为你必须声明分钟MediaPayer(正如你对第二个所做的那样),这样:minuteSound = new MediaPlayer(); 试试这个并返回。如果它不起作用,也许你必须在再次调用之前释放MediaPlayer。
答案 2 :(得分:0)
问题是我的声音文件的文件格式。它们最初是 96000Hz 波形文件,我将它们更改为 44100Hz MP3文件,然后一切正常。我删除了.setOnPrepareListener
部分,因为它没有它。