我有這個複選框,當它被檢查時應該靜音所有的聲音。當我運行該應用程序,並且取消選中該複選框時,聲音已打開。然後我檢查一下盒子,發出的聲音都是靜音的!當我取消複選框時,聲音保持靜音。我究竟做錯了什麼??安卓取消靜音不會切換爲靜音
這裏是我的代碼使用的情況下,有人發現了它有用
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個靜音(累計),我們需要兩次取消靜音。
你爲什麼不使用' onCheckedChanged方法中的「isChecked」參數? – maysi
我猜'''m = true;''''''''''''''''oncheckedChanged''''''''''''當onCreate不大時,''''''''變量了。糾正我,如果我錯了 – maysi
我曾經使用isChecked,但問題仍然存在,然後我用'buttonView.isChecked()'@Simon – efnero