无法增加Honeycomb及以上音乐流的音量

时间:2012-02-15 17:40:33

标签: java android

我的代码允许用户在其设备上发出声音警报。在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。它仍然设置为零。想法?

2 个答案:

答案 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);
}