Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓取消静音不';t切换到静音_Android_Checkbox_Audio_Android Audiomanager_Mute - Fatal编程技术网

Android 安卓取消静音不';t切换到静音

Android 安卓取消静音不';t切换到静音,android,checkbox,audio,android-audiomanager,mute,Android,Checkbox,Audio,Android Audiomanager,Mute,我有一个复选框,当它被选中时,它应该使所有声音静音。当我运行应用程序并且复选框未选中时,声音打开。然后我选中该框,声音被静音!当我取消选中复选框时,声音保持静音。我做错了什么 这是我使用的代码 public class Settings extends Activity { CheckBox chb; boolean m; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sav

我有一个复选框,当它被选中时,它应该使所有声音静音。当我运行应用程序并且复选框未选中时,声音打开。然后我选中该框,声音被静音!当我取消选中复选框时,声音保持静音。我做错了什么

这是我使用的代码

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

并再次使声音静音!因此,我们有两个静音(累计),需要将其取消静音两次。

问题是在更新视图之前调用了侦听器,因此您需要使用传递给您的isChecked 将已检查的侦听器切换到以下位置:

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

        }

为什么不在onCheckedChanged方法中使用'isChecked'参数呢?我猜
m=true
m=falseonCheckedChanged
中的code>是多余的。如果我错了,请更正我使用了isChecked,但问题仍然存在,然后我使用了
按钮view.isChecked()
@simmonth这是我在发布之前编写代码的方式!我又试了一次,但还是一样。刚刚测试了代码,它成功了,也许你在其他地方静音了?我在android 2.3.3上测试了它…我将尝试另一个api!我发现了这一点,所以我希望2.3是问题所在。我不认为这是问题所在:(尝试放置Log.d消息并注释静音/取消静音逻辑,以确定问题所在