В документации сказано:
Команда отключения звука защищена от смерти клиентского процесса: если процесс с активным запросом отключения звука в потоке умирает, этот поток будет автоматически включен.
Запросы на отключение звука для данного потока являются кумулятивными: AudioManager может получить несколько запросов на отключение звука от одного или нескольких клиентов, и поток будет включен только тогда, когда будет получено такое же количество запросов на включение звука.
Что ж, первый абзац верен; Всякий раз, когда мой процесс умирает, все потоки, которые я заглушил, автоматически включаются. Однако, сколько бы раз я ни звонил setStreamMute(someStream, false)
, звук НИКОГДА не включается. В прошлый раз я пытался вызвать его более 1 миллиона раз после отключения звука только ОДИН РАЗ и НИЧЕГО не происходит!
Просто отметим: если я включу его тем же методом, что и звук, он останется без звука. Но при следующих вызовах того же метода он никогда не отключается.
Я отключаю звук в методе широковещательного приемника onReceive, который я запускаю с помощью диспетчера тревог. Так может быть, это потому, что мое приложение было убито во время между вызовом отключения звука и вызовом включения? (Но мое приложение все еще остается в оперативной памяти)
Может ли эта проблема быть из-за того, что я не сохраняю ссылку на AlarmManager (каждый раз получаю разные экземпляры?)
Кто-нибудь сталкивался с этой проблемой?