[英]How to adjust SoundPool sound volume on the go?
我正在嘗試創建將連續播放兩個短聲音的android應用。 我必須隨時隨地調節音量,應該是立體聲。 我的意思是左邊的音量可能會變大,而右邊的音量可能會變安靜。 我該如何實現? 我創建了如下的AsyncTask,並且我將同時運行其中的兩個。 這是正確的方法嗎?
private class PlaySoundTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPreExecute() {
SoundPool sndPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 100);
sndPool.load(R.raw.soundOne, 1);
}
@Override
protected Void doInBackground(String... params) {
while (m_stop_sound) {
sndPlay.play(R.raw.soundOne, 1, 0, 0);
}
return null;
}
}
不,由於簡單原因,此方法不正確。 根據您所運行的版本,兩個AsyncTask
可能無法同時運行:
https://groups.google.com/forum/?fromgroups#!topic/android-developers/8M0RTFfO7-M
您可以使用AsyncTask.executeOnExecutor(...)
覆蓋此行為,但是仍然可以從API 11開始定位系統,該API大約占可用設備的60%:
http://developer.android.com/about/dashboards/index.html
此外, AsyncTask
不適用於長時間運行的操作,因為它們很容易被系統殺死以獲取內存。 如果它包含不再使用的活動的引用,則可能導致內存泄漏。
使用您自己的Thread
並可能使用Handler
來通知UI線程。 另外在這里看看:
建議將RoboSpice作為AsyncTask的即用型安全替代品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.