在不同 class 中播放声音 class Android
Playing sound class in different classes Android
我在另一个 classes 中从 SoundManager class 调用方法时遇到一些问题。这是 SoundManager class.
public class 声音管理器 {
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);
}
这是第二个 class 中我尝试调用它的部分。当我转到 运行 应用程序时,堆栈跟踪将我恢复到 SoundManager 中初始化上下文的那一行,说 .getActivity() 不能在空对象引用上初始化。
public class 玩家 {
private GameScreen mGameScreen;
private Game mGame;
SoundManager mSoundManager = new SoundManager(mGame);
public Player(GameScreen gameScreen, GameEventHandler mGameEventHandler, Game game) {
super();
}
初始化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)
}
.
.
我在另一个 classes 中从 SoundManager class 调用方法时遇到一些问题。这是 SoundManager class.
public class 声音管理器 {
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);
}
这是第二个 class 中我尝试调用它的部分。当我转到 运行 应用程序时,堆栈跟踪将我恢复到 SoundManager 中初始化上下文的那一行,说 .getActivity() 不能在空对象引用上初始化。
public class 玩家 {
private GameScreen mGameScreen;
private Game mGame;
SoundManager mSoundManager = new SoundManager(mGame);
public Player(GameScreen gameScreen, GameEventHandler mGameEventHandler, Game game) {
super();
}
初始化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)
}
.
.