在静音模式下,在Android应用程序中手动静音?

在静音模式下,在Android应用程序中手动静音?,android,audio,Android,Audio,我试图找到答案,但我的搜索结果总是不相关…… 所以问题是——我正在写一个播放音效的游戏(目前还没有音乐),我将流类型设置为音乐。然而,当我将手机置于静音模式(如果这很重要,也没有振动)时,应用程序仍会播放声音。我可以使用音量键关闭应用程序中的声音,但我所期望的(以及我未来的用户可能也会期望的)是,当手机处于静音模式时,应用程序不会发出声音。 在这一点上,我不确定这是否应该由操作系统自动管理,或者我是否应该对此做些什么。我当然可以检测到静音模式,在例如onResume中将音量设置为0,但这可能会

我试图找到答案,但我的搜索结果总是不相关……
所以问题是——我正在写一个播放音效的游戏(目前还没有音乐),我将流类型设置为音乐。然而,当我将手机置于静音模式(如果这很重要,也没有振动)时,应用程序仍会播放声音。我可以使用音量键关闭应用程序中的声音,但我所期望的(以及我未来的用户可能也会期望的)是,当手机处于静音模式时,应用程序不会发出声音。

在这一点上,我不确定这是否应该由操作系统自动管理,或者我是否应该对此做些什么。我当然可以检测到静音模式,在例如
onResume
中将音量设置为0,但这可能会覆盖用户通过按音量按钮设置的设置-因此,当他们解除手机静音时,应用程序必须以编程方式将音量设置为预定义值,或者理想情况下,设置为sharedPrefs中保存的音量。。。这听起来比较麻烦。有更好的解决办法吗?

这就是我初始化并使用声音的方式:

soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new SparseIntArray();
soundPoolMap.put(CLICK_1, soundPool.load(activity, R.raw.click1, 1));
soundPoolMap.put(CLICK_2, soundPool.load(activity, R.raw.click2, 2));
...
float volume = 1.0f;
soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f);

我从您的问题中了解到,当设备处于静默模式时,您希望将应用程序静音

每次在应用程序播放声音/音乐之前,请尝试检查
铃声模式
,并且仅当铃声
铃声模式
正常时才播放声音

下面是示例代码

AudioManager audio = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
switch (audio.getRingerMode())
{
    case AudioManager.RINGER_MODE_NORMAL:
    // Device is on Normal mode.
    // you can play music.
    break; 
    case AudioManager.RINGER_MODE_SILENT:
    // Device is on Silent mode.
    // you should not play sound now.
    break;
    case AudioManager.RINGER_MODE_VIBRATE:
    // Device is on Vibrate/Meeting mode.
    // you should not play sound but you can make vibrate device (if you want).
    break;
}

回答得很好。改进:始终启动播放并基于当前RingerMode控制MediaPlayer音量。在当前播放过程中,如果RingerMode发生更改,也可以启动音频监视器循环以执行相同操作。