Как программно определить, активна ли система 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.