Как отключить звуковой эффект системы на AlertDialog?

У меня есть AlertDialog с 2 кнопками. Я хочу, чтобы они играли свой собственный звук, когда их щелкали. Поэтому у меня есть этот код на каждой кнопке:

SoundUtility.getInstance(Add_Edit_Note.this).playPositive(); 

SoundUtility – это класс, который я написал для воспроизведения пользовательских звуков. Вот в чем проблема: он воспроизводит мой собственный звук, но одновременно он также воспроизводит звуковой эффект системы, поэтому у меня одновременно есть два звука. Я смог отключить его на обычных кнопках, переписав кнопку:

 public class AppButton extends Button { public AppButton(Context context, AttributeSet attrs) { super(context, attrs); // Disable sound effect this.setSoundEffectsEnabled(false); } } 

А затем в моем XML-файле:

 <com.my.app.AppButton ... /> 

Но я не могу найти способ отключить эти звуковые эффекты системы на кнопках AlertDialog. Какие-либо предложения?

РЕДАКТИРОВАТЬ

В соответствии с запросом это код 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

Код моего 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 

Попробуй это

 Button btn = dialog.getButton(Dialog.BUTTON_POSITIVE); btn.setSoundEffectsEnabled(false); 

Вызовите setSoundEffectsEnabled для всех кнопок, которые у вас есть.

РЕДАКТИРОВАТЬ:

Вместо

  builder.create().show(); 

использование

 AlertDialog dialog = builder.create(); dialog.show(); Button btn = dialog.getButton(Dialog.BUTTON_POSITIVE); btn.setSoundEffectsEnabled(false); Button btn2 = dialog.getButton(Dialog.BUTTON_NEGATIVE); btn2.setSoundEffectsEnabled(false); 

Я смог отключить звуковую обратную связь во всем мире, поставив android:soundEffectsEnabled=false в теме.

Вы можете применить тему к всему приложению из файла манифеста.

Альтернативный путь:

Вы можете создать один класс и использовать его в файлах макета …

твой класс :

 package com.me.customeapp public class MeTextView extends TextView { public MeTextView (Context context, AttributeSet attrs) { this.setSoundEffectsEnabled(false); } } 

Внутри xml-файла, помещенного под кодом:

 <com.me.customeapp.TextView ... </com.me.customeapp.TextView> 

Попробуйте. Надеюсь, это поможет вам.