Как программно определить, активна ли система Dolby или нет в приложении Android

У меня проблема с моим приложением для Android, когда я запускаю на разжигании огня 7"с активным Dolby, в звуке есть изъян, но когда эта опция отключена, проблема исчезает.

Я использую MediaPlayer для воспроизведения длинных аудиофайлов, я не могу использовать AudioPool, потому что это фоновые звуки, я уже использую SoundPool для воспроизведения эффектов.

Есть ли способ программно определить, активна ли система Dolby или нет в приложении Android?

Есть ли способ заставить MediaPlayer принимать многоканальный?

Извините за мой плохой английский:p


Я нашел способ программно установить свойство "dolby.ds.state", но это вызвало ОГРОМНУЮ проблему, поэтому НЕ ДЕЛАЙТЕ ЭТОГО!

Этот способ:

System.setProperty("dolby.ds.state", "off");

Когда я это сделал, свойство было применено, но только после перезагрузки устройства, после того как я это сделал, я изменил опцию меню, обычно устройство продолжало получать значение, установленное программно.

Если вы сделали ту же самую глупость, я нашел способ ее решить, запустить следующий код и перезагрузить устройство:

Properties sysProps = System.getProperties();
sysProps.remove("dolby.ds.state");
System.clearProperty("dolby.ds.state");

2 ответа

Решение

Если вы делаете adb shell getprop | grep dolby вы увидите, что есть системное свойство dolby.ds.state, которое переключается между Вкл. и Выкл., когда оно активно (воспроизведение аудио)

Для запроса активного состояния из вашего приложения это позволяет запрашивать свойство System (обратите внимание, что вам, вероятно, придется обернуть блоки try/catch вокруг него, чтобы Java была довольна)

Class getSysProp = null;
getSysProp = Class.forName("android.os.SystemProperties");
Method method = null;
method = getSysProp.getDeclaredMethod("get", String.class);
String prop = null;
prop = (String)method.invoke(null, "dolby.ds.state");

Похоже, что различные виды аудио запускают состояние Dolby - если вы посмотрите logcat с чем-то вроде воспроизведения iHeartRadio, вы увидите, что настройка Dolby обойдется для orbis, так что вы можете просто изменить кодек, который используете, когда вы не Не хочу, чтобы это было включено.

** Редактирование: обновление с новым официальным Dolby API **

Смотрите http://developer.dolby.com/ для более полного (и менее хакерского!) Решения.

У Dolby теперь есть официальный API, который, я уверен, удовлетворит ваши потребности. Не забудьте проверить http://developer.dolby.com/

Как разработчик приложения, вы теперь можете получить доступ к технологиям Dolby.

Другие вопросы по тегам