2014-09-24 150 views
1

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

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

这是我如何初始化&然后用声音:在静音模式下手动静音Android应用程序中的声音?

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); 

回答

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; 
} 
+0

谢谢,这个解决方案为我创造了奇迹。 – 2017-09-26 12:14:32

相关问题