Der folgende Code gibt einen zufälligen Ton wieder. Ich versuche es zu veröffentlichen, da ich die Taste nicht mehr brauche, um etwas anderes zu spielen, aber wenn ich die Anwendung starte, wird die Taste überhaupt keinen Ton abspielen.Wie können SoundPool-Objekte ordnungsgemäß freigegeben werden?
public class actibida extends AppCompatActivity {
SoundPool soundPool;
Button button;
boolean loaded = false;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_actibida);
soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
loaded = true;
}
});
//I have a total of four sounds
final int[] sound = new int[4];
sound[0] = soundPool.load(actibida.this, R.raw.el, 1);
sound[1] = soundPool.load(actibida.this, R.raw.guau, 1);
sound[2] = soundPool.load(actibida.this, R.raw.miau, 1);
sound[3] = soundPool.load(actibida.this, R.raw.quack, 1);
final Random r = new Random();
button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View button) {
final Random r = new Random();
int Low = 0;
int High = 3;
int rndm = r.nextInt(High - Low) + Low;
soundPool.play(sound[r.nextInt(4)], 1.0f, 1.0f, 0, 0, 1.0f);
}
});
soundPool.release();
}
}
Kann jemand bitte erziehen mich auf, wie man richtig nennen .release()?
P.S. Wenn ich andere Sounds in der App spiele, sollte ich eine andere SoundPool-Klasse verwenden? Oder sollte ich es einfach freigeben und wieder laden? Die Sache ist, dass ich überhaupt nicht in der Lage bin zu veröffentlichen, also kann ich es nicht sagen.
Ich bearbeitet den Beitrag, so dass jeder den Rest des Codes überprüfen konnte. Ich habe versucht, soundPool.release(); ganz am Ende, aber es funktioniert immer noch nicht. Wo sollte ich es platzieren? – Camilo
Wenn Sie es nach Abschluss der Aktivität nicht verwenden möchten, geben Sie es in onDestroy() frei. –