Ho un AlertDialog con 2 pulsanti. Voglio che riproducano il mio suono personalizzato quando vengono cliccati. Così ho questo codice su ogni pulsante:Come disabilitare l'effetto sonoro di sistema su AlertDialog?
SoundUtility.getInstance(Add_Edit_Note.this).playPositive();
SoundUtility è una classe che ho scritto per riprodurre i suoni personalizzati. Ecco il problema: suona il mio suono personalizzato, ma allo stesso tempo suona anche l'effetto sonoro del sistema, quindi ho due suoni che suonano allo stesso tempo. Sono stato in grado di disattivarlo sui pulsanti regolari riscrivendo il pulsante:
public class AppButton extends Button {
public AppButton(Context context, AttributeSet attrs) {
super(context, attrs);
// Disable sound effect
this.setSoundEffectsEnabled(false);
}
}
e poi nel mio file XML:
<com.my.app.AppButton
... />
ma non riesco a trovare un modo per disattivare questi effetti sonori del sistema sui pulsanti AlertDialog. Eventuali suggerimenti?
EDIT
Come richiesto, questo è il codice SoundUtility:
public class SoundUtility {
private static SoundUtility soundInstance;
private MediaPlayer mpPositive;
private MediaPlayer mpNegative;
public static SoundUtility getInstance(Context context){
if(soundInstance==null)
{
soundInstance = new SoundUtility(context);
}
return soundInstance;
}
private SoundUtility (Context context)
{
mpPositive = MediaPlayer.create(context, R.raw.click_positive);
mpNegative = MediaPlayer.create(context, R.raw.click_negative);
}
// Playing positive sound
public void playPositive() {
mpPositive.start();
}
// Playing negative sound
public void playNegative() {
mpNegative.start();
}
// Releasing MediaPlayer
public void releaseMediaPlayer() {
mpPositive.release();
mpNegative.release();
}
}
EDIT 2
Il codice del mio AlertDialog:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to cancel?")
.setCancelable(false) // The dialog is modal, a user must provide an answer
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
// If the answer is Yes
public void onClick(DialogInterface dialog, int id) {
...
setResult(RESULT_CANCELED); // Setting result as cancelled and returning it to main activity
SoundUtility.getInstance(Add_Edit_Note.this).playPositive(); // Play positive sound
Add_Edit_Note.this.finish(); // Closing current activity
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
// If the answer is No
public void onClick(DialogInterface dialog, int id) {
SoundUtility.getInstance(Add_Edit_Note.this).playNegative(); // Play negative sound
dialog.cancel(); // Closing the confirmation dialog
}
});
builder.create().show(); // Present the dialog to the user
Penso che dovresti postare il codice per la tua classe SoundUtility, deve giocare questo effetto sonoro di sistema da qualche parte. – breadbin
@breadbin Inserito il codice SoundUtility. Ma in realtà non c'è niente che suoni l'effetto sonoro del sistema, solo i miei suoni personalizzati ... – Igal