EN 301 549 -- Mobile Screen Reader Interoperability
What It Is
ETSI EN 301 549 v3.2.1 clause 11 (Software) requires that application software expose its user interface through the host platform's accessibility services so that assistive technologies -- on mobile, that means VoiceOver on iOS and TalkBack on Android -- can read, navigate, and operate it[1]. The load-bearing section is 11.5 Interoperability with assistive technology, whose sub-clause 11.5.2 Accessibility services enumerates exactly which pieces of information a UI element must surface[2].
The sub-clauses under 11.5.2 form a checklist of what the accessibility tree has to carry for each element:
- 11.5.2.5 Object information -- role, state, boundary, name, description.
- 11.5.2.6 Row, column, and headers -- for tabular content.
- 11.5.2.7 Values -- current value, minimum, maximum for ranges.
- 11.5.2.8 Label relationships -- programmatic association between a control and its visible label.
- 11.5.2.9 Parent-child relationships -- the hierarchy the screen reader walks.
- 11.5.2.10 Text -- text content, selection, and attributes.
- 11.5.2.11 List of available actions and 11.5.2.12 Execution of available actions -- what the user can do and how the AT triggers it.
- 11.5.2.13 Tracking and 11.5.2.14 Modification of focus and selection -- the AT must be able to read and move focus.
- 11.5.2.15 Change notification, 11.5.2.16 Modifications of states and properties, and 11.5.2.17 Modifications of values and text -- the app must emit events when the UI changes so the AT can announce them.
Why It Matters
VoiceOver and TalkBack do not read pixels. They query the platform accessibility tree that the app publishes, then speak the role, label, value, state, and available actions for whichever element currently holds accessibility focus. A custom widget drawn directly onto a UIView or View canvas -- common in game engines, bespoke chart libraries, and Flutter/React Native components that bypass native controls -- publishes nothing. The screen reader lands on it and has no name to read, no role to announce, and no action to invoke. The control is visually present and audibly absent.
How It Relates to WCAG
11.5.2 is the mobile-software analogue of WCAG 4.1.2 Name, Role, Value, extended past the DOM to cover the entire platform UI toolkit. Where 4.1.2 governs what a browser hands to an AT through the accessibility tree built from HTML and ARIA, 11.5.2 governs what a native application hands to the platform AT framework through UIAccessibility on iOS and AccessibilityNodeInfo / AccessibilityNodeProvider on Android. The underlying obligation -- name, role, value, state, actions, change notifications -- is the same; the API surface is different.
Practical Implications
- Use native UI components first.
UIButton,UILabel,UISwitch,android.widget.Button, Jetpack ComposeButton, and SwiftUIButtonpopulate the accessibility tree by default. Every custom-drawn replacement is new work to satisfy 11.5.2. - For custom views on iOS, set
isAccessibilityElement = trueand populateaccessibilityLabel,accessibilityValue,accessibilityHint,accessibilityTraits, andaccessibilityCustomActions. PostUIAccessibility.Notification.layoutChangedand.announcementwhen state changes, which is how 11.5.2.15 gets satisfied. - For custom views on Android, override
onInitializeAccessibilityNodeInfo(or useViewCompat.setAccessibilityDelegate) to setcontentDescription,className,stateDescription, andAccessibilityNodeInfo.AccessibilityActionentries. CallsendAccessibilityEventon state changes. - Hybrid WebViews must forward accessibility. iOS
WKWebViewand AndroidWebViewexpose the embedded document to the platform AT, but only if the host app does not wrap them in a non-accessible container or setimportantForAccessibility="no"on the parent. - Do not intercept the platform AT gestures. VoiceOver's single-finger swipe, two-finger double-tap, and the three-finger scroll -- and TalkBack's equivalents -- are reserved. An app that calls
preventDefault-equivalents on touch events before they reach the AT breaks navigation for every screen-reader user on the platform. - Test on device with VoiceOver and TalkBack on every release. Simulator AT behaviour does not match hardware AT behaviour, and the accessibility tree built at runtime is the only artifact the sub-clauses under 11.5.2 actually constrain.
Related Clauses
Sources
- ETSI EN 301 549 v3.2.1, clause 11.5 and sub-clauses 11.5.2.1 through 11.5.2.17[1]
- Accessibility Standards Canada, EN 301 549 clause 11 (Software) summary[2]
- WCAG 2.2 Understanding 4.1.2 Name, Role, Value