У меня есть этот флажок, который должен отключать все звуки при его проверке. Когда я запускаю приложение, и флажок не установлен, звук включен. Затем я поставлю флажок, и звук отключен! Когда я снимаю флажок, звуки остаются приглушенными. Что я делаю не так??Android unmute не переключается в режим отключения звука
Вот код, я использую
public class Settings extends Activity {
CheckBox chb;
boolean m;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
final SharedPreferences prefs = this.getSharedPreferences("mute", Context.MODE_PRIVATE);
m = prefs.getBoolean("mute", false);
chb = (CheckBox) findViewById(R.id.checkBox1);
chb.setChecked(m);
final AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
amanager.setStreamMute(AudioManager.STREAM_MUSIC, m);
chb.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (buttonView.isChecked() == true)
{
m = true;
amanager.setStreamMute(AudioManager.STREAM_MUSIC, true);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("mute", true);
editor.commit();
}
if (buttonView.isChecked() == false)
{
m = false;
System.out.println("unmute");
amanager.setStreamMute(AudioManager.STREAM_MUSIC, false);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("mute", false);
editor.commit();
}
}
});
}
обновление I в случае кто-то находит это полезным.
Запросы об отсутствии звука для данного потока являются кумулятивными: AudioManager может получать несколько немых запросов от одного или нескольких клиентов, и поток будет отключен только при получении одинакового количества запросов unmute.
Для удобства пользователей приложения ДОЛЖНЫ включать звук приглушенного потока в onPause(), а при необходимости отключить звук в onResume().
В моем случае проблема заключалась в том, что когда я устанавливаю флажок, я отключу звук. Когда я вернусь к активности настроек, этот код снова будет выполнен
final SharedPreferences prefs = this.getSharedPreferences("mute", Context.MODE_PRIVATE);
m = prefs.getBoolean("mute", false);
chb = (CheckBox) findViewById(R.id.checkBox1);
chb.setChecked(m);
final AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
amanager.setStreamMute(AudioManager.STREAM_MUSIC, m);
и снова отключает звуки! Таким образом, у нас есть 2 mute (кумулятивный), и нам нужно отключить его дважды.
почему вы не использовать " isChecked 'в методе onCheckedChanged? – maysi
, и я думаю, что '' 'm = true;' '' и '' 'm = false;' '' '' 'onCheckedChanged'' является избыточным, когда ваш onCreate не больше, и вам не нужно переменная больше. исправьте меня, если я ошибаюсь – maysi
Я использовал isChecked, но проблема осталась, а затем я использовал 'buttonView.isChecked()' @Simon – efnero