我试过找到答案,但是我的搜索仍然无法返回相关的结果......
所以问题是 - 我正在编写一个播放声音效果的游戏(还没有音乐),我将流类型设置为音乐。但是,当我将手机置于静音模式时(无振动,如果重要),应用程序仍会播放声音。我可以使用音量键关闭应用程序中的声音,但我所期望的(以及我未来的用户可能期望的那样)是当手机处于静音模式时应用程序不会发出声音。
此时,我不确定这是否应该由操作系统自动管理,或者我是否应该对此做些什么。我当然可以检测到静音模式,例如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);
答案 0 :(得分:1)
我从您的问题中了解到,当设备处于silent mode
时,您希望将应用静音。
在应用播放声音/音乐之前,每次都要检查RingerMode
,并且仅在铃声RingerMode
正常时播放声音。
以下是示例代码。
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;
}