2013-07-22 70 views
2

我有這個複選框,當它被檢查時應該靜音所有的聲音。當我運行該應用程序,並且取消選中該複選框時,聲音已打開。然後我檢查一下盒子,發出的聲音都是靜音的!當我取消複選框時,聲音保持靜音。我究竟做錯了什麼??安卓取消靜音不會切換爲靜音

這裏是我的代碼使用的情況下,有人發現了它有用

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(); 
      } 

     } 
    }); 

} 

我更新。

給定流的靜音請求是累積的:AudioManager可以接收來自一個或多個客戶端的多個靜音請求,並且只有在接收到相同數量的取消靜音請求時,流纔會取消靜音。

爲了獲得更好的用戶體驗,應用程序必須取消靜音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個靜音(累計),我們需要兩次取消靜音。

+0

你爲什麼不使用' onCheckedChanged方法中的「isChecked」參數? – maysi

+0

我猜'''m = true;''''''''''''''''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