2015-02-19 3 views
0

У меня есть приложение, которое производит звук на 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); 
} 

ответ

1

Несколько вещей, которые можно было бы здесь происходит. Во-первых, проверьте, что ваше целевое устройство не имеет политики фиксированного тома. Как указано в AudioManager.setStreamVolume()

Этот метод не действует, если устройство реализует политику фиксированного тома, указанную isVolumeFixed().

Затем убедитесь, что вы не устанавливаете громкость выше максимальной. вы можете использовать AudioManager.getStreamMaxVolume(), чтобы найти это число.

Если ни одна из этих проблем не является проблемой, вам нужно будет опубликовать код о том, как вы используете API.

+0

Спасибо, не существует фиксированной политики томов, потому что сенсорный звук на экране работает с моим кодом, и я могу увеличить или уменьшить звук. – sam2215

+0

Я также добавил код, спасибо – sam2215

Смежные вопросы