在偏好活动中静音

Posted

技术标签:

【中文标题】在偏好活动中静音【英文标题】:Mute audio in preference activity 【发布时间】:2015-08-13 22:19:51 【问题描述】:

我是 Java 开发的新手,我开始构建一个简单的 android 应用程序。 我的 MainActivity 创建了一个名为“GameView”的 SurfaceView,我在其中创建了弹跳球。还创建了一个选项菜单(在我的 MainActivity 中),其中包含一个“设置”项。点击设置按钮时,会启动一个名为 SettingsActivity 的新 PreferenceActivity。在设置菜单中,我必须使用简单的复选框来控制背景音乐和音效(静音/取消静音)。

我在 settings.xml 中的复选框:

<CheckBoxPreference
     android:summary="Turn music on or off"
     android:defaultValue="true"
     android:title="Music"
     android:key="musicPref" 
/>
<CheckBoxPreference
     android:summary="Turn sounds on or off"
     android:defaultValue="true"
     android:title="Sounds"
     android:key="soundPref" 
/> 

我在公共 GameView 函数中使用了以下代码来获取复选框的值:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
musicPlaying = sharedPrefs.getBoolean("musicPref", true );
soundPlaying = sharedPrefs.getBoolean("soundPref", true );

编辑: 我是否必须在我的设置菜单中定义一个点击事件才能将我的复选框的更改值传递给我的游戏视图?

如何将更改后的值传递给我的游戏视图?

【问题讨论】:

你能澄清一下你需要帮助的地方吗?将点击事件传递给游戏视图? 编辑了最初的帖子。是的,我必须将我的点击传递给游戏视图,还是以我可以从我的 GameView 访问它们的方式保存首选项? 【参考方案1】:

您正在使用 SharedPreferences 来读取设置,因此您需要在其中写入值,例如:

ToggleButton tBsound;
tBsound.setChecked(sharedPrefs.getBoolean("soundPref",true));
SharedPreferences.Editor editor=sharedPrefs.edit();
tBsound.setOnClickListener(new OnClickListener() 
   @Override public void onClick(View v) 
   //save settings
   if (tBsound.isChecked()) editor.putBoolean("soundPref",true);
      else editor.putBoolean("soundPref",false); 
   editor.commit();
   
);

此示例使用 ToggleButton,如果您使用的是复选框,只需相应地更改它。编写设置的独立代码如下所示:

if (Build.VERSION.SDK_INT>=11)
   mySettings = getSharedPreferences(PREFS, MODE_MULTI_PROCESS);
else mySettings = getSharedPreferences(PREFS,0);
SharedPreferences.Editor editor = mySettings.edit();
editor.putBoolean("data",true);
editor.commit();

如果有多个进程(如服务)访问 SharedPreferences,您将需要 MODE_MULTI_PROCESS 标签,以强制 android 每次都清理缓存的值。

【讨论】:

TY Joanmi 为您解答,但您能详细说明一下吗?如果我理解正确,我会在我的 SettingsActivity 中监听按钮/复选框的更改,但是如何获取或知道值何时更改,以便我知道何时播放声音?那么 MODE_MULTI_PROCESS 究竟是什么? 嗨,Tomjesch!你有你的答案在这里***.com/questions/6496450/android-checkbox-preference和这里developer.android.com/reference/android/content/…和更多关于MODE_MULTI_PROCESS的信息在这里***.com/questions/27827678/…【参考方案2】:

感谢 Joanmi 让我走上正轨。我做了一些广泛的研究,结果发现在 PreferenceActivity 中所做的更改会自动保存。不需要监听器,因此使用:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); musicPlaying = sharedPrefs.getBoolean("musicPref", true ); soundPlaying = sharedPrefs.getBoolean("soundPref", true );

在我的 GameView 中足以检查我的 PreferenceActivity 的变化。

【讨论】:

以上是关于在偏好活动中静音的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - 共享偏好无法保存在新活动中

我的主要活动中的偏好不会改变

横向方向的android偏好活动填充

If-else语句基于先前的活动选择来获取共享偏好

启动配置活动时调用Widget onUpdate

在活动的 OS X 桌面上保留一个窗口