2013-07-22 3 views
2

У меня есть этот флажок, который должен отключать все звуки при его проверке. Когда я запускаю приложение, и флажок не установлен, звук включен. Затем я поставлю флажок, и звук отключен! Когда я снимаю флажок, звуки остаются приглушенными. Что я делаю не так??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 (кумулятивный), и нам нужно отключить его дважды.

+0

почему вы не использовать " isChecked 'в методе onCheckedChanged? – maysi

+0

, и я думаю, что '' 'm = true;' '' и '' 'm = false;' '' '' 'onCheckedChanged'' является избыточным, когда ваш onCreate не больше, и вам не нужно переменная больше. исправьте меня, если я ошибаюсь – maysi

+0

Я использовал isChecked, но проблема осталась, а затем я использовал 'buttonView.isChecked()' @Simon – efnero

ответ

0

Проблема заключается в том, что слушатель вызывается перед тем, вид обновляется, так что вы должны использовать IsChecked переданы вам Переключите onchecked слушателя к этому:

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      if (isChecked == true) 
      { 
       m = true; 
       amanager.setStreamMute(AudioManager.STREAM_MUSIC, true); 

       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putBoolean("mute", true); 
       editor.commit(); 
      } 
      else 
      { 
       m = false; 
       System.out.println("unmute"); 
       amanager.setStreamMute(AudioManager.STREAM_MUSIC, false); 

       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putBoolean("mute", false); 
       editor.commit(); 
      } 

     } 
+0

Вот как я написал код до того, что я отправил! но все тот же .. – efnero

+0

Просто протестировал код, и он сработал, может быть, вы заглушаете где-то еще? –

+0

Я тестировал его на Android 2.3.3 ... я попробую еще один api! – efnero