Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用MediaPlayer从res/raw播放声音文件_Android_Audio_Media Player - Fatal编程技术网

Android 使用MediaPlayer从res/raw播放声音文件

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

我想使用MediaPlayer播放原始文件夹中的声音文件,但我不想使用MediaPlayer.create方法,因为我想播放多次并保留MediaPlayer对象。我成功地编译了下面的代码,但它什么也不播放,我听不到任何声音

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方法中无法进行。。。怎么办