1

我正在为我的 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 播放的方法,只是整数。感谢您帮助我弄清楚我错过了什么!

4

1 回答 1

1

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

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

如果您不想提供一个供多个应用程序组件使用的通用类,那么只需创建一个“助手”POJO 类。如果它需要使用 a ContextSoundPool例如),您可以简单地将Activity上下文传递给方法 as this。但是要小心持有对的引用,Activity Context因为它可能导致内存泄漏。

其次,为您的问题提供简单的答案...

return a的load(...)方法是您用来调用该方法的方法。如果您只想播放随机声音,则只需创建某种数组并使用随机数按索引从数组中获取。简单——只需一行代码即可访问相关的.SoundPoolsoundIDplay(...)soundIDsoundID

于 2013-08-21T00:33:28.743 回答