Android 使用MediaPlayer从res/raw播放声音文件
我想使用MediaPlayer播放原始文件夹中的声音文件,但我不想使用MediaPlayer.create方法,因为我想播放多次并保留MediaPlayer对象。我成功地编译了下面的代码,但它什么也不播放,我听不到任何声音Android 使用MediaPlayer从res/raw播放声音文件,android,audio,media-player,Android,Audio,Media Player,我想使用MediaPlayer播放原始文件夹中的声音文件,但我不想使用MediaPlayer.create方法,因为我想播放多次并保留MediaPlayer对象。我成功地编译了下面的代码,但它什么也不播放,我听不到任何声音 public void STARTSOUND(SOUND sound) throws IOException { switch(sound) { case SOUND_MENUBG: Uri uri = Uri.parse("R
public void STARTSOUND(SOUND sound) throws IOException {
switch(sound) {
case SOUND_MENUBG:
Uri uri = Uri.parse("R.raw.mainmenu");
PLAYSOUND(uri);
break;
}
}
public void PLAYSOUND(Uri file) throws IOException {
mPlayerLoopSound.setDataSource(GameManager.getInstance().getCurrentActivity(),file);
mPlayerLoopSound.prepareAsync();
mPlayerLoopSound.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (!mPlayerLoopSound.isPlaying()){
mPlayerLoopSound.setVolume(1.0f, 1.0f);
//start the player
mPlayerLoopSound.start();
}
}
});
}
onPrepared方法从未被调用。。
我做错什么了吗
private void playButtonSound(final Context context, final int resourceId)
{
final MediaPlayer mediaPlayer = MediaPlayer.create(context, resourceId);
if (mediaPlayer != null)
{
mediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mediaPlayer)
{
if (mediaPlayer != null)
{
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
});
mediaPlayer.start();
}
}
像这样调用这个方法
playButtonSound(PopScreenActivity.this, R.raw.soundfilename);
首先,希望您正在初始化MediaPlayer时使用:
mPlayerLoopSound = new MediaPlayer();
接下来,确保您拨打:
mPlayerLoopSound.setAudioStreamType(AudioManager.STREAM_MUSIC);
其中:
设置此MediaPlayer的音频流类型。有关流类型的列表,请参见AudioManager。必须在prepare或prepareAsync之前调用此方法,才能使目标流类型在此后生效
然后,在OnPreparedListener中,当调用onPrepared时,请注意它的参数:MediaPlayer mp。这是准备好播放的MediaPlayer,因此您可以使用它:
@Override
public void onPrepared(MediaPlayer mp) {
if(!mp.isPlaying()) {
mp.setVolume(1.0f, 1.0f);
mp.start();
}
}
您必须创建方法..,如MediaPlayer=MediaPlayer.createFakeCallScreen.this,R.raw.mysoundfile@VinamraBhabal您是否在实际设备上运行代码?@Kanwaljit Singh是的……我不想使用create方法。因为多次使用它会占用更多的内存,游戏也会出现问题。我想保留Media Player对象。@VinamraBhabal如果您的声音文件继续播放,请使用mediaPlayer.setLoopingtrue;否则请使用该服务。@Zala Janaksinh我这样做了。。。但是不工作。。。我收到错误MediaPlayer22853:错误1,-2147483648…我无法解决此问题。所以我改变了我的声音代码,我得到了另一个问题。。。请帮我做这个。谢谢你的回复。但这也不起作用。。我收到错误MediaPlayer22853:错误1,-2147483648。当我在调试中运行代码时,我的调试器调用没有进入mPlayerLoopSound.setOnPreparedListenernew OnPreparedListener{}…@Melquiades与上面给出的代码相同。。。。除了添加了mPlayerLoopSound.setAudioStreamTypeAudioManager.STREAM_音乐外,没有任何更改;在prepareAsync@vinamrabal之前,您问题中的代码不足以判断出现此错误的原因,至少包括onCreate、onPause、onResume。此外,请解释出现此错误的时间。是在应用程序的开头吗?按下按钮之后?播放完声音之后?等等,@Melquiades现在我更新了我的代码。我在这两行之后出错了。。。mPlayerLoopSound.setDataSourceGameManager.getInstance.getCurrentActivity,文件;mPlayerLoopSound.prepareAsync;我的主要问题是我的调用在mPlayerLoopSound.setOnPreparedListener新的OnPreparedListener方法中无法进行。。。怎么办