我正在尝试使用 AsyncTask 在后台一个接一个地播放 5 个 SoundPool。但我想在声音运行时单击 ImageView。当 SoundPool 使用 getBaseContext() 在 doInBackground 运行时阻塞我的 ImageView 时,问题就开始了。有谁知道发生了什么?非常感谢!这是我的代码:
public class SensoriomotoraActivity extends Activity {
private boolean playing = false ;
private ImageView image ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sensoriomotora);
image = (ImageView) findViewById(R.id.img_sensoriomotora_pandereta);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (playing){
Log.v("onClick","clicked while playing");
}
else {
Log.v("onClick","clicked while !playing");
}
}
});
new Thread (
new Runnable(){
@Override
public void run(){
// Waiting 2.5 secs before playing the beeps
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
new PlaySoundBackground().execute();
}
});
}
}
).start();
}
private class PlaySoundBackground extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
playing = true ;
}
@Override
protected Void doInBackground(Void... params) {
SoundPool sound;
sound = new SoundPool(1, AudioManager.STREAM_MUSIC,0);
sound.load(getBaseContext(), R.raw.beep, 1);
sound.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
for (int i=0 ; i<5; i++){
soundPool.play(sampleId, 1, 1, 1, 0, 1);
try {
Thread.sleep(2000); // Waits 2 secs before next beep
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
playing = false ;
}
}
}