Почему AudioManager.isStreamMuted недоступен?

Я использую Android AudioManager для отключения и включения звука потоков, таких как STREAM_SYSTEM и STREAM_NOTIFICATION, отключение звука выполняется простым вызовом setStreamMute, но я не могу найти метод isStreamMuted.

Глядя внутрь исходного кода, я вижу он существует, поэтому возникает вопрос: как проверить, отключен ли звук потока?

Я работаю на Android 4.0.4


person dafi    schedule 09.12.2012    source источник
comment
Хороший вопрос. ищу такой же. вы нашли ответ?   -  person Shirish Herwade    schedule 05.11.2015


Ответы (3)


Неприятный ответ заключается в том, что приглушение потока работает для каждого процесса отдельно. Таким образом, вы можете безопасно хранить состояние отключения звука где-нибудь в статической переменной, надлежащим образом обернутой, и отслеживать состояние отключения звука самостоятельно. Говорю из горького опыта. Иногда ты делаешь то, что должен делать. Почему они это сделали? Это более сложный вопрос....

person Robin Davies    schedule 09.12.2012

Размышления — ваш друг. Это сработало для меня.

try {
    Method m = AudioManager.class.getMethod("isStreamMute", int.class);
    isMuted = (Boolean) m.invoke(am, AudioManager.STREAM_MUSIC);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
    System.out.println(e);
}

Обновление: метод public boolean isStreamMute (int streamType) теперь доступен в API 23 без использования отражения.

person Eric Lange    schedule 14.06.2014
comment
большое спасибо и очень-очень-очень маленькая коррекция isMuted = (Boolean) m.invoke(am, AudioManager.STREAM_MUSIC); - person Shirish Herwade; 05.11.2015
comment
Исправил в ответ. Спасибо! - person Eric Lange; 06.11.2015

Они убрали этот метод из android.jar, используя hide:

/**
 * get stream mute state.
 *
 * @hide
 */
public boolean isStreamMute(int streamType) {
person powder366    schedule 23.04.2014