好吧,我已经搜索了一遍并完成了一堆阅读,现在我看到我在使用下面的代码时出错了,尤其是在做我想做的事情时内存泄漏的问题。但是,我不太确定如何以不同的方式做到这一点。这是代码:
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?虽然这样做会使主应用程序代码变得混乱。我想这并不重要,但我想知道这是否是正确的方法,或者是否有更好的方法来做到这一点。