资源ID hashmap的创建和传递

时间:2013-09-15 20:29:29

标签: java android

好吧,我已经搜索了一遍并完成了一堆阅读,现在我看到我在使用下面的代码时出错了,尤其是在做我想做的事情时内存泄漏的问题。但是,我不太确定如何以不同的方式做到这一点。这是代码:

public class SoundPlayer extends Activity {

private String sound;
private SoundPool soundPool;
private float fSpeed = 1;
private int resID;

public SoundPlayer(String s) {
    sound = s;
}

public SoundPlayer(String s, float f) {
    sound = s;
    fSpeed = f;
}

public void playSound() {
    resID = WorkoutStopwatch.getResources().getIdentifier(sound, "raw", "com.blueflamesys.workoutstopwatch");
    AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = streamVolumeCurrent / streamVolumeMax;

    soundPool.play(resID, volume, volume, 1, 0, fSpeed);
}
}

我正在尝试创建一个活动(虽然,在我看过的一些阅读之后,我认为我只需要一个课而不是一个活动)来播放声音。这个声音将是许多原始文件之一,因此resID变量设置,以及我试图从非静态方法调用getResources()的错误。重构的类看起来像这样:

public class SoundPlayer extends {

private SoundPool soundPool;
private float fSpeed = 1;
private int resID;

public SoundPlayer(int r) {
    resID = r;
}

public SoundPlayer(int r, float f) {
    resID = r;
    fSpeed = f;
}

public void playSound() {       
    soundPool.play(resID, 1, 1, 1, 0, fSpeed);
    }
}

由于有多种声音我更喜欢用String来解决,我想最好的办法是创建一个hashmap,其中键作为表示声音的字符串,值作为int resID?虽然这样做会使主应用程序代码变得混乱。我想这并不重要,但我想知道这是否是正确的方法,或者是否有更好的方法来做到这一点。

0 个答案:

没有答案