我有一个在Android上发出声音的应用程序,我的代码是在所有音频流上设置音量,以确保所有流都设置了音量。以下是这些流:
STREAM_MUSIC
STREAM_RING
STREAM_ALARM
STREAM_NOTIFICATION
STREAM_VOICE_CALL
STREAM_DTMF
STREAM_SYSTEM
如果我使用以下方式更改音量:
audioMgr.setStreamVolume(audioStream, newVolume, 0);
我没有看到音量被改变,它播放默认音量但是使用上述方法改变了触摸音量。 这是代码:
HashMap<Integer, Integer> maxVolumeMap= new HashMap<Integer, Integer>();
AudioManager audioMgr = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
maxVolumeMap.put(AudioManager.STREAM_MUSIC,audioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
maxVolumeMap.put(AudioManager.STREAM_RING,audioMgr.getStreamMaxVolume(AudioManager.STREAM_RING));
maxVolumeMap.put(AudioManager.STREAM_ALARM,audioMgr.getStreamMaxVolume(AudioManager.STREAM_ALARM));
maxVolumeMap.put(AudioManager.STREAM_NOTIFICATION,audioMgr.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION));
maxVolumeMap.put(AudioManager.STREAM_VOICE_CALL,audioMgr.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
maxVolumeMap.put(AudioManager.STREAM_DTMF,audioMgr.getStreamMaxVolume(AudioManager.STREAM_DTMF));
maxVolumeMap.put(AudioManager.STREAM_SYSTEM,audioMgr.getStreamMaxVolume(AudioManager.STREAM_SYSTEM));
int newVolume = 7; //this is new volume value
Iterator<Integer> itr = maxVolumeMap.keySet().iterator();
while (itr.hasNext())
{
//set new volume for all audio streams
int audioStream = itr.next();
float deviceVolume = (float)(newVolume/10.0f) *maxVolumeMap.get(audioStream);
audioMgr.setStreamVolume(audioStream, Math.round(deviceVolume), 0);
}
答案 0 :(得分:1)
这里可能会发生一些事情。首先,检查目标设备是否没有固定的卷策略。正如AudioManager.setStreamVolume()
中所述如果设备实现isVolumeFixed()指示的固定卷策略,则此方法无效。
接下来,确保您没有将音量设置为高于最大设置。您可以使用AudioManager.getStreamMaxVolume()来查找该号码。
如果这些都不是问题,那么您必须发布一些有关您如何使用API的代码。
答案 1 :(得分:0)
要管理android中的音量,请转到以下链接: