关闭整个应用程序的声音 android
Posted
技术标签:
【中文标题】关闭整个应用程序的声音 android【英文标题】:turn off sound for whole application android 【发布时间】:2017-10-09 11:24:51 【问题描述】:我对 android 很陌生,目前正在开发一个测验应用程序,当用户使用该应用程序时,我会在其中播放声音。我的设置活动中有一个开关按钮,可以在其中打开和关闭应用程序的声音。 我已经实现了一些逻辑,但它还没有工作。我已经用尽了我所知道的,我需要一些帮助。
style.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:soundEffectsEnabled">true</item>
</style>
<style name="AppThemeMute" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:soundEffectsEnabled">false</item>
</style>
MyApplication.java
public class MyApplication extends Application
private static int sTheme;
public final static int THEME_SOUND_ON = 0;
public final static int THEME_SOUND_OFF = 1;
@Override
public void onCreate()
super.onCreate();
public static void changeToTheme(Context context, int theme)
sTheme = theme;
switch (sTheme)
default:
case THEME_SOUND_ON:
context.setTheme(R.style.AppTheme);
break;
case THEME_SOUND_OFF:
context.setTheme(R.style.AppThemeMute);
break;
SettingsActivity.java
public class SettingsActivity extends AppCompatActivity
private Switch mSoundSwitch;
private Switch mAdsSwitch;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
// handling switch button
mSoundSwitch = (Switch) findViewById(R.id.soundSwitch);
mSoundSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
if (isChecked)
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putBoolean("sound", true);
editor.apply();
// Change Whole App Theme
MyApplication.changeToTheme(getApplicationContext(), MyApplication.THEME_SOUND_ON);
else
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putBoolean("sound", false);
editor.apply();
MyApplication.changeToTheme(getApplicationContext(), MyApplication.THEME_SOUND_OFF);
);
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
boolean isChecked = sharedPreferences.getBoolean("sound", true);
mSoundSwitch.setChecked(isChecked);
目前,切换按钮与sharedPreferences
完美配合。但是,切换按钮时声音不会静音。
【问题讨论】:
我认为你没有重新创建你当前的活动可能会起作用。在您的changeToTheme
方法结束之前使用 recreate()
或者如果这对您不起作用,请检查here
见***.com/questions/10895882/…
我认为设置主题不起作用。你应该让你的音乐服务代替你的 changeToTheme() 方法。在那里,您可以使用音乐服务对象控制您的应用程序音乐。
【参考方案1】:
private void mute()
//mute audio
AudioManager amanager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true);
public void unmute()
//unmute audio
AudioManager amanager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, false);
这两个函数可以很好的处理音频mute
和unmute
。
您可以根据用户preference
简单地将切换/切换到mute
或unmute
。
【讨论】:
如何创建全局变量? 这将静音所有应用的通知流。 这将使整个设备通知声音静音。更好地编程以在您的应用程序级别进行控制。 AudioManager.STREAM_MUSIC 为我工作。但是,我需要担心 setStreamMute 的弃用警告吗? 这将使所有应用程序静音。以上是关于关闭整个应用程序的声音 android的主要内容,如果未能解决你的问题,请参考以下文章
播放大量声音时,Android soundpool 意外关闭应用程序而没有消息
在 Android 上分析来自麦克风的声音(谐波、分音、泛音)[关闭]