音量无法在Android上运行

时间:2015-02-19 18:00:47

标签: android

我有一个在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);
}

2 个答案:

答案 0 :(得分:1)

这里可能会发生一些事情。首先,检查目标设备是否没有固定的卷策略。正如AudioManager.setStreamVolume()

中所述
  

如果设备实现isVolumeFixed()指示的固定卷策略,则此方法无效。

接下来,确保您没有将音量设置为高于最大设置。您可以使用AudioManager.getStreamMaxVolume()来查找该号码。

如果这些都不是问题,那么您必须发布一些有关您如何使用API​​的代码。

答案 1 :(得分:0)

要管理android中的音量,请转到以下链接:

  1. http://developer.android.com/training/managing-audio/volume-playback.html

  2. Using SeekBar to Control Volume in android?

    我希望它会有所帮助。