2017-01-31 9 views
1

Итак, искусство регистрации широковещательного приемника для ACTION_HEADSET_PLUG и фактически processing the plug in/out events хорошо понято сейчас.Как получить ACTION_HEADSET_PLUG в OnCreate()

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

Тем не менее, везде, где я читал, регистрация приемника должна производиться либо в onStart(), либо onResume(), - что не дает возможности для onCreate() использовать флаг, установленный приемником.

Любая идея, как обходить это?

Есть ли способ для опрос разъем для гарнитуры?

ответ

1

Вы можете использовать AudioManager's isWiredHeadsetOn(), чтобы определить, если подключена гарнитура, хотя отмечают, что в соответствии с документацией:

Это не является допустимым показателем того, что воспроизведение звука фактически через проводную гарнитуру, как зависит аудио маршрутизации на других условиях.

Вы также хотите посмотреть на значения isSpeakerphoneOn(), isBluetoothA2dpOn() и isBluetoothScoOn(), чтобы получить лучшее представление о том, что в настоящее время включена.

+0

спасибо. Я читал о 'isWiredHeadsetOn()' s gotchas. Вот почему я играл с ACTION_HEADSET_PLUG. По какой-то причине я пропустил «isSpeakerphoneOn()» AudioManager и другие методы, которые вы упомянули, поэтому благодарим вас за это. На самом деле, для меня не имеет значения, подключена ли проводная гарнитура или подключена гарнитура Bluetooth. Пока звук не попадает в динамик, 'onCreate()' должен продолжаться. – WebViewer