如何在没有API 8中引入的onLoadCompleteListener的情况下检查SoundPool是否已准备就绪?

时间:2015-01-08 17:07:20

标签: android soundpool

Android程序是如何检查Sound是否已准备就绪并在旧版Android中播放?通常人们会像这样告诉Soundpool:

   soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            loaded = true;
        }
    });
    soundID = soundPool.load(this, R.raw.beep, 1);

但onLoadCompleteListener是在API级别8中引入的,所以它不起作用。我的节目无法播放任何声音。检查声音是否准备就绪的另一种方法是什么?我只想在背景上放一些音乐。

1 个答案:

答案 0 :(得分:0)

现在可能是一个没有实际意义的问题,但在API 8之前,我会通过尝试以0.0音量播放来检查声音是否准备就绪,看看它是否返回了正流ID。如果不是我会睡觉&循环在"准备"阶段,直到它发挥。

// Briefly play the stream at zero volume to get it decoded and prepped.
int stream = soundPool.play( soundPoolId, 0.0f, 0.0f, 1, 0, 1.0f );
if (stream > 0)
{
  soundPool.stop(stream);
  isPrepared = true;
}