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

标签 android audio

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

在这一点上,我不确定这是否应该由操作系统自动管理,或者我是否应该对此做些什么。我当然可以检测到静音模式,在例如 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);

最佳答案

我从你的问题中了解到,你想在设备处于静音模式时将你的应用静音。

每次在您的应用播放声音/音乐之前尝试检查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;
}

关于android - 在静音模式下在 Android 应用程序中手动静音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26015933/

相关文章:

android - 未调用 ClusterManager OnClusterClickListener

java - 使用 Google Play 游戏进行 Firebase 身份验证

windows - 在 Qt 中一次播放多个声音

java - 如何在特定时间内停止剪辑/对象?

user-interface - 商业游戏软件中使用的库(SDL的替代品)

javascript - 立即播放 JavaScript 声音文件

javascript - MediaElement.js 音频播放器 - 有趣的移动包装

android appwidget listview 不更新

Android:如何从地址簿中检索联系人照片、姓名、号码并使用 ListView 显示

android - OKHttp 监听连接状态