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

У меня проблема с моим приложением для Android, когда я запускаю Kindle Fire 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");

person Luis Rodrigues    schedule 12.04.2013    source источник
comment
Если вы еще этого не сделали, вы можете задать этот вопрос на форуме поддержки разработчиков Kindle Fire: forums.developer.amazon.com/forums/forum.jspa?forumID=12   -  person CommonsWare    schedule 12.04.2013
comment
я уже сделал это, но спасибо forums.developer.amazon .com/форумы/   -  person Luis Rodrigues    schedule 12.04.2013
comment
К вашему сведению, используйте тег kindle-fire для будущих вопросов, связанных с Kindle Fire, так как такие замечательные люди, как @Offbeatmammal (который имеет странный аватар, не относящийся к млекопитающим...) от Amazon следите за этим тегом и с большей вероятностью увидит ваш вопрос.   -  person CommonsWare    schedule 12.04.2013
comment
Спасибо, я пытался использовать этот тег, но у меня недостаточно баллов :(   -  person Luis Rodrigues    schedule 13.04.2013


Ответы (2)


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

Чтобы запросить активное состояние из вашего приложения, вы можете запросить системное свойство (обратите внимание, что вам, вероятно, придется обернуть вокруг него блоки 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, поэтому вы можете просто изменить кодек, который вы используете, когда вы этого не делаете. не хочу, чтобы он был включен.

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

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

person Offbeatmammal    schedule 12.04.2013
comment
СПАСИБО! С помощью этого решения я мог узнать, включена опция или нет, но я не понял, как я могу ее изменить, есть ли способ сделать это? - person Luis Rodrigues; 12.04.2013
comment
извините, вопрос задавался только о его обнаружении. Я не нашел способа управлять им — я не видел в свойствах ничего, что соответствовало бы выбранному пользователем параметру, который можно было бы использовать для управления этим (состояние dolby.ds.state просто отражает текущее состояние, если оно было вызвано воспроизведением). Просить пользователя отключить его, вероятно, будет для него неприятным опытом. Можете ли вы использовать другой кодек для аудио, которое вы не хотите обрабатывать таким образом? - person Offbeatmammal; 12.04.2013
comment
Извините, я действительно не спрашивал, как изменить опцию, но это могло бы мне помочь. ;p Я ищу способ сделать это, но я, вероятно, предупрежу пользователя и попрошу его отключить опцию, еще раз спасибо, вы спасли мне жизнь :) - person Luis Rodrigues; 12.04.2013
comment
Этот способ слишком хакерский :) Ответ ниже кажется правильным. - person avepr; 18.11.2013

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

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

person Eric Ang    schedule 06.11.2013