В своем заявлении я делаю следующее заявление:
toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);
Это очень хорошо работает на дешевом LG LS670 под управлением Android 2.3.3, но совсем не звучит на всех других телефонах, которые у меня есть, от Android 2.2.1 до Android 2.3.4.
Итак, я знаю, что версия ОС здесь не играет роли (я также подтвердил в документации, что она поддерживается с API 1).
Кроме того, для громкости звонка и мультимедиа установлено максимальное значение, а тональный генератор инициализируется с помощью:
toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);
И я подтвердил, что Settings.System.DTMF_TONE_WHEN_DIALING
установлен в 1.
Озадаченный таким непоследовательным поведением (на разных телефонах), я изучил системные журналы, когда это происходит, и единственное подозрительное различие, которое мне удалось найти, это то, что телефоны, которые не работают, TONE_PROP_ACK
имеют эту строку в их журнал:
AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121
Какова цель AudioFlinger и что может быть его связь с отключением звука TONE_PROP_ACK
?
Любая идея, как исправить мой код, чтобы этот TONE_PROP_ACK всегда звучал, независимо от модель телефона?
routing=0
дляio 25
означает, что AudioFlinger сообщает конкретному аудиопотоку (в данном случае я предполагаю, что это AudioStreamOut), что он должен маршрутизироваться в никуда. То, как аудио HAL будет обрабатывать, зависит от реализации - поэтому он может, например, оставьте маршрутизацию для этого потока без изменений. - person Michael   schedule 06.02.2013