The Android CDD is a tedious document to pick over, largely because very small changes in wording can have very big consequences. While I would hardly call this one "very big," it's still significant: Google has changed the support of standard impedance-based inline headphones controls from a suggestion to a hard requirement. Now, devices with 4-conductor 3.5mm audio jacks must recognize the impedance range and corresponding action it must produce when used on an inline controller.

MUST support the detection and mapping to the keycodes for the following 3 ranges of equivalent impedance between the microphone and ground conductors on the audio plug:

  • 70 ohm or less : KEYCODE_HEADSETHOOK
  • 210-290 Ohm : KEYCODE_VOLUME_UP
  • 360-680 Ohm : KEYCODE_VOLUME_DOWN

Inline headphone controls are a rather... analog method of device control, but they do have the benefit of generally being widely compatible with most phones these days. Still, some smartphone and tablet manufacturers out there may be utilizing different impedance levels to recognize different actions that conflict with the universal standards for things like volume, and Google is putting its foot down here. The required actions to be recognized are headset recognition (device needs to know a proper headset is connected), volume up, and volume down. Google has kept the voice assist shortcut as an optional feature, though it moved from "should" to "strongly recommended."

It's a small attempt at reducing fragmentation in the ecosystem, and with USB-C ports replacing 3.5mm jacks on some phones (presumably unaffected by this rule), the impact may be limited. I'm also not sure why this wasn't required before - it's not exactly an onerous technical burden, nor is it at all controversial. Leaving it optional just left manufacturers free to screw up something that should be universal. At least they won't be able to [as easily] anymore.