Я бы предложил двухфазную атаку.
Используйте AudioFocus для платформ, которые он поддерживает.Это примерно 90% телефонов, поэтому для большинства пользователей это лучшее решение.Нет причин, по которым ваше приложение не может поддерживать обе реализации и просто предоставляет подходящую для базовой платформы во время выполнения.
Для 1.6 я бы предложил следующее.Предположительно, функциональность вашего приложения, на которую вы хотите повлиять, - это своего рода воспроизведение звука.Если ваше приложение находится в процессе воспроизведения звука, то постепенный расход батареи при опросе, чтобы увидеть, будут ли изменения режима звука, будет относительно незначительным.
Когда вы не воспроизводите звук, вам нужно толькозапросить текущий режим звука, прежде чем начать воспроизведение звука.
Для указанного вами случая влияние батареи на прослушивание изменений датчика и таймеров запуска, опять-таки, превзойдет эффект опроса режима звука- особенно если вы хотите включить свою функциональность, когда режим нормальный.
Поскольку вы хотите отключить определенные функции только в течение коротких периодов времени, когда телефон находится в режиме разговора, лучше выполнить запрос в режиме аудио непосредственно перед выполнением действия, которое вы хотите отключить во время разговора.
Таким образом, шаги становятся следующими:
- Проверка режима звука перед воспроизведением / действием.
- Опрос режима звука во время воспроизведения.