在不同的Android类中播放声音类

时间:2017-05-05 13:35:15

标签: android class methods call soundpool

我在我的另一个类中调用SoundManager类中的方法时遇到了一些麻烦。这是SoundManager类。

公共类SoundManager {

private SoundPool soundPool;
public static final int maxSounds = 2;
AudioManager audioManager;
private int[] soundId;
private Context context; //= mGame.getActivity().getApplicationContext();
Game mGame;
public SoundManager(Game game) {
    super();
    context = game.getActivity().getApplicationContext();
    //this.mGame = game;

    soundPool = new SoundPool(maxSounds, AudioManager.STREAM_MUSIC, 0);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        soundPool = new SoundPool.Builder()
                .setMaxStreams(maxSounds)
                .build();
    } else {
        soundPool = new SoundPool(maxSounds, AudioManager.STREAM_MUSIC, 0);
    }

    soundId = new int[16];

    soundId[0] = soundPool.load(context, R.raw.sound1, 1);
    //soundId[1] = soundPool.load(context, R.raw.cardsound, 1);
    soundId[2] = soundPool.load(context, R.raw.swoosh, 1);
    soundId[3] = soundPool.load(context, R.raw.clicksound, 1);
    soundId[4] = soundPool.load(context, R.raw.scifi, 1);
    soundId[5] = soundPool.load(context, R.raw.phasebattle, 1);
    soundId[6] = soundPool.load(context, R.raw.card_mr_electron, 1);
    soundId[7] = soundPool.load(context, R.raw.card_james_watt, 1);
    soundId[8] = soundPool.load(context, R.raw.card_marvin, 1);
    soundId[9] = soundPool.load(context, R.raw.card_leonardo, 1);
    soundId[10] = soundPool.load(context, R.raw.card_edmund, 1);
    soundId[11] = soundPool.load(context, R.raw.card_terminator, 1);
    soundId[12] = soundPool.load(context, R.raw.card_mr_robot, 1);
    soundId[13] = soundPool.load(context, R.raw.card_labrat, 1);
    soundId[14] = soundPool.load(context, R.raw.card_nerd, 1);
    soundId[15] = soundPool.load(context, R.raw.card_angle, 1);

    audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}

public void playSound(int sound, float volume) {
    soundPool.play(soundId[sound], volume, volume, 1, 0, 1f);
}

这是我试图称之为的第二堂课的一部分。当我去运行应用程序时,堆栈跟踪会将我恢复为SoundManager中初始化上下文的行,说明.getActivity()无法在空对象引用上初始化。

public class Player {

private GameScreen mGameScreen;

private Game mGame;
SoundManager mSoundManager = new SoundManager(mGame);

public Player(GameScreen gameScreen, GameEventHandler mGameEventHandler, Game game) {
    super();

}

1 个答案:

答案 0 :(得分:0)

初始化SoundManager时,Game尚不存在。

试试这个:

public class Player {

private GameScreen mGameScreen;

    private Game mGame;
    SoundManager mSoundManager;

    public Player(GameScreen gameScreen, GameEventHandler mGameEventHandler, Game game) {
            super();
            mSoundManager = new SoundManager(game)

     }
     .
     .