a PhoneStateListener
, как следует из названия, является просто слушателем, он не может выполнять действия в текущем вызове, это ответственность приложения Phone
по умолчанию.
Хорошая новость в том, что вы пользователь может установить ваше приложение как приложение по умолчанию Phone
, но это заставит вас реализовать определенные действия и службы, которые могут выходить за рамки вашего приложения.
Вам нужно будет реализовать собственную панель набора номера активность для совершения звонков, ваш собственный InCallService
для обработки активных вызовов и собственный пользовательский интерфейс во время разговора, позволяющий пользователю отключать звук, включать динамик, подключаться к Bluetooth, переводить вызов в режим ожидания вызова , отправьте тональные сигналы во время разговора и т.д. c.
Вы можете проверить эту серию средних сообщений о том, как сделать ваше приложение приложением для телефона по умолчанию. * После того, как вы сделали свое приложение телефоном по умолчанию и ваше приложение управляет текущим приложением, вы можете использовать setAudioRoute
для включения громкой связи.
РЕДАКТИРОВАТЬ:
Вы можете попробовать использовать setSpeakerphoneOn
в AudioManager (isX
всегда используется для проверки значения, setX
используется для изменения значения), однако в документации сказано:
Этот метод должен использоваться только приложения, которые заменяют общесистемное управление настройками звука или основное приложение телефонии.
Я не уверен, что Android обеспечивает это, запрещая приложениям вызывать этот метод, и если да, то на какая платформа Android, но вы можете попробовать это.
Существует также способ использовать java отражение для доступа к скрытому API, см. здесь , но использование отражения почти наверняка не работает в последней версии Android и может заблокировать доступ вашего приложения в Google Play. Тем не менее, возможно, стоит поиграться.