この標準のSoundManagerを使用します。 SoundManager.playSoundで、それは今だけ私のすべてのデバイスではなく、市場で正常に動作し、その後、私はこれらのエラーを取得しSoundManagerで時折NullPointerExceptionが発生する
のNullPointerException(SoundManager.java:87)SoundManager.cleanupで
NullPointerExceptionが(SoundManager .java:107)
ここではコードである:
public class SoundManager {
private static SoundManager _instance;
private static SoundPool mSoundPool;
private static HashMap<Integer, Integer> mSoundPoolMap;
private static AudioManager mAudioManager;
private static Context mContext;
private SoundManager(){ }
static synchronized public SoundManager getInstance(){
if (_instance == null)
_instance = new SoundManager();
return _instance;
}
public static void initSounds(Context theContext){
mContext = theContext;
mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
}
public static void addSound(int Index,int SoundID){
mSoundPoolMap.put(Index, mSoundPool.load(mContext, SoundID, 1));
}
public static void loadSounds(){
mSoundPoolMap.put(1, mSoundPool.load(mContext, R.raw.kick1, 1));
mSoundPoolMap.put(2, mSoundPool.load(mContext, R.raw.kick2, 1));
mSoundPoolMap.put(3, mSoundPool.load(mContext, R.raw.kick3, 1));
}
public static void playSound(int index, float volume){
**line 87:** float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume/mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play(mSoundPoolMap.get(index), streamVolume*volume, streamVolume*volume, 1, 0, 1);
}
public static void stopSound(int index){
mSoundPool.stop(mSoundPoolMap.get(index));
}
public static void cleanup(){
**line 107:** mSoundPool.release();
mSoundPool = null;
mSoundPoolMap.clear();
mAudioManager.unloadSoundEffects();
_instance = null;
}
}
これは、開始アクティビティにあるクリーンアップのための呼び出しです:
//REMOVE SOUND MEMORY ALLOCATION
@Override
public void onDestroy()
{
super.onDestroy();
SoundManager.cleanup();
}
誰もがこれら時折珍しいエラーが発生し、どのようにそれらを防ぐために何ができるか知っていますか?これは、このSoundManagerを使用する私のすべてのアプリケーションで発生します...少しの推測でさえ助けることができます。
エラーを再現できる場合は、 'playSound'メソッドと' cleanup'メソッドの両方で 'mSoundPool'、' mSoundPoolMap'、および 'mAudioManager'の値を' Log'してください。そのうちの1つはnullにバインドされています。しかし、initSoundsが呼び出される前に何かが呼び出される状況があると私は推測しています。 – Eric
ありがとう、エリック。私は、私のデバイス上でエラーを再現することができません、そうでなければ、原因を見つけることはずっと簡単です。 – Lumis
行87と107をマークできますか? – WarrenFaith