我有允许用户在他们的设备上发出可听到警报的代码。在Android2.3和更低版本中,我可以发出警报,即使声音是通过AudioManager.setStreamVolume通过编程增加音量而一直调低的。然而,现在在Android3.x和更新版中,当我尝试这样做时,本机卷调整小部件会出现在屏幕上一段时间,但是当前的卷仍然是零。守则如下:
int currentVolume = audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC);
int maxVolume = audioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
audioMgr.setStreamMute(AudioManager.STREAM_MUSIC, false);
// If the current volume is not set to the maximum level
if (currentVolume < maxVolume) {
// Set the current volume to the maximum level
audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, AudioManager.ADJUST_RAISE);
}我的问题is...what已经改变了蜂巢,这使这不再有效?我在setStreamVolume之后设置了一个断点,然后手动运行getStreamVolume。它仍然被设定为零。有什么想法?
发布于 2012-02-15 17:57:01
因此,setStreamVolume似乎被忽略了,但adjustStreamVolume却没有。我仍然需要在非蜂窝设备上进行更多的测试,但到目前为止,这段代码似乎有效:
while(audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) < maxVolume) {
audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
}发布于 2012-06-16 16:47:06
对于ICS (Android4.0.3),问题仍然存在,但也有一个可行的解决方案。尝试使用以下代码:
// The commented code below works with 2.3, but not with 4.0 (ICS)
//audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, lvl, 0);
// Use this instead
while(audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) > lvl) {
audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0);
}
while(audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) < lvl) {
audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0);
}https://stackoverflow.com/questions/9298383
复制相似问题