如題 ,相信android 使用 SoundPool 不會少吧
android SoundPool的優勢就不說了
現在要說的是
初始化的時候使用:
@Override protected void onStart() { mPoolTurnSignal = new SoundPool(1, AudioManager.STREAM_SYSTEM, 100); turnSignal = mPoolTurnSignal.load(this, R.raw.turn_signal, 0);} protected void onResume() { mPoolTurnSignal = new SoundPool(1, AudioManager.STREAM_SYSTEM, 100); turnSignal = mPoolTurnSignal.load(this, R.raw.turn_signal, 0);}private void SetForSingalSound() { if(mSingView.getProtocolLampSignal() != 0 ) { if(PoolState == POOL_PRESTART) { mPoolTurnSignal.play(turnSignal, 1, 1, 0, -1, (float) 0.7); PoolState = POOL_PLAYING; } } else { if(PoolState == POOL_PLAYING) { mPoolTurnSignal.pause(turnSignal); PoolState = POOL_PRESTART; } } }
play之後
pause 和stop 除了第一次可以正常關閉之後
再開啟就無法關閉了
鬱悶了一整天
現在找到問題了
private void SetForSingalSound() { if(mSingView.getProtocolLampSignal() != 0 ) { if(PoolState == POOL_PRESTART) {int tt = mPoolTurnSignal.play(turnSignal, 1, 1, 0, -1, (float) 0.7);Log.i("MicroCar:", "SetForSingalSound tt "+tt); PoolState = POOL_PLAYING; } } else { if(PoolState == POOL_PLAYING) { mPoolTurnSignal.pause(turnSignal); PoolState = POOL_PRESTART; } } }
注意紅色字型修改後
看到logcat 就明白了
原來 每次play開啟返回 的值都是變化的
通過logcat可以看到 每次開啟tt 的到不同的值1、2、3、4、5、6.。。。
然而之前我關閉或者暫停是
mPoolTurnSignal.pause(turnSignal);
turnSignal 是初始化第一次的值,而第二次開啟之後這數值是不一樣的 所以 是要傳遞響應的值進去關閉
比如
turnSignal = mPoolTurnSignal.play(turnSignal, 1, 1, 0, -1, (float) 0.7);Log.i("MicroCar:", "SetForSingalSound turnSignal:"+turnSignal);mPoolTurnSignal.pause(turnSignal);
應該可以了現在。