チェックするとすべての音をミュートするはずのこのチェックボックスがあります。アプリを実行してチェックボックスをオフにすると、サウンドがオンになります。次に、ボックスをチェックすると、音がミュートされます! チェックボックスをオフにすると、サウンドはミュートされたままになります。私は何を間違っていますか??
これが私が使用するコードです
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 は 1 つ以上のクライアントから複数のミュート リクエストを受け取ることができ、同じ数のミュート解除リクエストが受信された場合にのみ、ストリームのミュートが解除されます。
ユーザー エクスペリエンスを向上させるために、アプリケーションは 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 つのミュート (累積) があり、2 回ミュートを解除する必要があります。