Android取消静音不会切换为静音

时间:2013-07-22 18:17:21

标签: android checkbox audio android-audiomanager mute

我有这个复选框,可以在检查时将所有声音静音。当我运行应用程序并取消选中该复选框时,声音会亮起。然后我检查框,声音被静音!当我取消选中复选框时,声音保持静音。我做错了什么?

这是我使用的代码

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个静音(累计),我们需要将它取消静音两次。

1 个答案:

答案 0 :(得分: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();
            }

        }