关闭整个应用程序的声音 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);

这两个函数可以很好的处理音频muteunmute

您可以根据用户preference 简单地将切换/切换到muteunmute

【讨论】:

如何创建全局变量? 这将静音所有应用的通知流。 这将使整个设备通知声音静音。更好地编程以在您的应用程序级别进行控制。 AudioManager.STREAM_MUSIC 为我工作。但是,我需要担心 setStreamMute 的弃用警告吗? 这将使所有应用程序静音。

以上是关于关闭整个应用程序的声音 android的主要内容,如果未能解决你的问题,请参考以下文章

播放大量声音时,Android soundpool 意外关闭应用程序而没有消息

在Android上听电脑的声音[关闭]

如何在Android中比较两个声音? [关闭]

在 Android 上分析来自麦克风的声音(谐波、分音、泛音)[关闭]

Android 使用WebView浏览有声音或者视频的网页,关闭WebView之后,声音或者视频不停止的解决办法

在我的 android 应用程序中开始新声音之前停止以前的声音