我的代码允许用户在其设备上发出声音警报。在Android 2.3及更低版本中,即使通过AudioManager.setStreamVolume
以编程方式增加音量来完全关闭声音,我也可以发出警报。但是现在在Android 3.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);
}
我的问题是...... Honeycomb 中发生了哪些变化,使其不再有效?我在setStreamVolume
之后设置了断点并手动运行getStreamVolume
。它仍然设置为零。想法?
答案 0 :(得分:3)
使用ICS(Android 4.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);
}
答案 1 :(得分:0)
因此似乎忽略setStreamVolume
,但adjustStreamVolume
不是。我仍然需要对非 Honeycomb 设备进行更多测试,但到目前为止,这段代码似乎有效:
while(audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) < maxVolume) {
audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
}