在SoundPool播放中使用String

时间:2013-08-20 22:52:28

标签: android soundpool

我正在为我的Android应用程序使用SoundPool。我在主活动中将大约75个一到三秒钟的声音加载到池中,然后使用Sound方法从其他活动中引用它们,如下所示:

    public void Sound(int s){
    AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    MainActivity.spool.play(s, volume, volume, 1, 0, 1f);
};

s是我在MainActivity类中定义的整数,例如:

static int sound_e;

然后像这样传入Sound方法:

Sound(sound_e);

我希望能够像这样定义一个字符串:

String letter_sound = "MainActivity.sound_" + currentLetter; 
//Example value of this string would be MainActivity.sound_a

然后将该字符串作为整数传递给Sound。这是为了避免26个if语句,我为这些数字做了这样的话:

if (randomNum == 1) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_1);}
        else if (randomNum == 2) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_2);}
        else if (randomNum == 3) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_3);}
        else if (randomNum == 4) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_4);}
        else if (randomNum == 5) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_5);}
        else if (randomNum == 6) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_6);}
        else if (randomNum == 7) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_7);}
        else if (randomNum == 8) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_8);}
        else if (randomNum == 9) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_9);}
        else if (randomNum == 10) {Log.v(TAG,  "Sound playing for: " + randomNum); Sound(MainActivity.sound_10);}
        else Log.v(TAG, "None of the ifs are true. randomNum: " + randomNum);

我没有在android文档中看到任何方式将字符串值传递给SoundPool播放,只是整数。谢谢你帮我搞清楚我错过了什么!

1 个答案:

答案 0 :(得分:1)

  

我正在为我的Android应用程序使用SoundPool。我在主要活动中将大约75个一到三秒钟的声音加载到池中,然后使用Sound方法从其他活动中引用它们......

首先......不要这样做。 Android Activity类不仅仅是一个普通的Java类,而且正确(安全)的Android编程方法是Activity应该是自包含的。其他Activities或应用组件无法访问public方法或数据字段。

如果您不想提供多个应用程序组件使用的公共类,那么只需创建一个“帮助程序”POJO类。如果需要使用Context(例如SoundPool),您只需将Activity上下文传递给this方法即可。请注意保留对Activity Context的引用,因为它可能导致内存泄漏。

其次,要轻松回答你的问题......

load(...) SoundPool方法返回soundID,这是您用来调用play(...)方法的方法。如果您只想播放随机声音,则只需创建某种数组,然后使用随机数通过索引从数组中获取soundID。很简单 - 只需一行代码即可访问相关的soundID