Screen Reader (स्क्रीन रीडर) एक प्रोग्राम है जो टेक्स्ट और ग्राफ़िकल इंटरफ़ेस तत्वों को भाषण या ब्रेल डिस्प्ले आउटपुट में बदलता है, जिससे नेत्रहीन और दृष्टिबाधित उपयोगकर्ता बिना दृश्य नियंत्रण के डिवाइस के साथ इंटरैक्ट कर सकते हैं। मोबाइल प्लेटफ़ॉर्म पर मुख्य स्क्रीन रीडर iOS पर VoiceOver और Android पर TalkBack हैं। विश्व स्वास्थ्य संगठन (2023) के अनुसार, Screen Reader दुनिया भर में दृष्टिबाधित 285 मिलियन लोगों के लिए डिजिटल तकनीक तक पहुँचने का प्राथमिक उपकरण है।
मुख्य बिंदु
Screen Reader (स्क्रीन रीडर) एक सहायक तकनीक (Assistive Technology, AT) है जो ग्राफ़िकल यूज़र इंटरफ़ेस की व्याख्या करती है और इसे गैर-दृश्य रूप में प्रस्तुत करती है: संश्लेषित भाषण या स्पर्शनीय ब्रेल डिस्प्ले के माध्यम से। स्क्रीन रीडर पूर्ण या आंशिक दृष्टि हानि वाले लोगों के लिए कंप्यूटर और मोबाइल उपकरणों तक पहुँचने का प्राथमिक साधन हैं।
पहले स्क्रीन रीडर 1980 के दशक के अंत में MS-DOS (जैसे, Vocal-Eyes) और बाद में Windows (JAWS, NVDA) के लिए दिखाई दिए। मोबाइल प्लेटफ़ॉर्म पर, स्क्रीन रीडर सिस्टम स्तर पर एकीकृत हो गए: Apple ने 2009 में iPhone 3GS में VoiceOver को एकीकृत किया, Google ने उसी वर्ष Android 1.6 में TalkBack को एकीकृत किया। 2025 तक, लगभग सभी आधुनिक स्मार्टफ़ोन में एक अंतर्निहित स्क्रीन रीडर होता है जिसके लिए अतिरिक्त सॉफ़्टवेयर इंस्टॉलेशन की आवश्यकता नहीं होती।
एक स्क्रीन रीडर केवल स्क्रीन से टेक्स्ट नहीं पढ़ता — यह इंटरफ़ेस पदानुक्रम का विश्लेषण करता है, तत्वों के प्रकार (बटन, लिंक, शीर्षक, इनपुट फ़ील्ड), उनकी स्थिति (सक्षम/अक्षम, चयनित/अचयनित) और संबंधों (पैरेंट-चाइल्ड, समूह) को निर्धारित करता है। यह जानकारी उपयोगकर्ता को वॉइस प्रॉम्प्ट या ब्रेल डिस्प्ले की स्पर्श संवेदनाओं के माध्यम से दी जाती है, जो फ़ोकस स्थिति के अनुसार वास्तविक समय में कोशिकाओं को अपडेट करता है।
स्क्रीन रीडर ऑपरेटिंग सिस्टम के साथ मिलकर काम करता है, उसके इंटरफ़ेस के आंतरिक प्रतिनिधित्व — एक्सेसिबिलिटी ट्री (Accessibility Tree) तक पहुँच प्राप्त करता है। यह तंत्र iOS और Android पर समान है, हालाँकि API के नाम भिन्न हैं।
स्क्रीन रीडर का मुख्य आउटपुट चैनल एक भाषण संश्लेषक (Text-To-Speech, TTS) है। जब एक्सेसिबिलिटी फ़ोकस किसी तत्व पर आता है, स्क्रीन रीडर उसकी टेक्स्ट सामग्री (या डेवलपर द्वारा दिया गया विवरण) निकालता है और TTS इंजन को भेजता है। आधुनिक TTS इंजन, जैसे Apple Speech Synthesis और Google Text-to-Speech, विराम चिह्नों और सामग्री प्रकार के आधार पर सही स्वर, ठहराव और जोर के साथ प्राकृतिक भाषण उत्पन्न करने के लिए तंत्रिका नेटवर्क का उपयोग करते हैं।
उपयोगकर्ता भाषण की गति (आमतौर पर आरामदायक धारणा के लिए अधिकतम का 60–80%), पिच और वॉल्यूम समायोजित कर सकता है। कुछ स्क्रीन रीडर कई आवाज़ों का समर्थन करते हैं और सामग्री प्रकार के अनुसार उनके बीच स्विच करते हैं — उदाहरण के लिए, टेक्स्ट पढ़ने के लिए धीमी आवाज़ और इंटरफ़ेस नेविगेशन के लिए तेज़ आवाज़। ब्रेल डिस्प्ले Bluetooth के माध्यम से कनेक्ट होते हैं और एक बार में 40–80 अक्षर प्रदर्शित करते हैं, प्रत्येक फ़ोकस परिवर्तन पर लाइन अपडेट करते हैं।
स्क्रीन रीडर एक्सेसिबिलिटी फ़ोकस (Accessibility Focus) की अवधारणा का उपयोग करता है, जो मानक इनपुट फ़ोकस से भिन्न है। उपयोगकर्ता जेस्चर (स्पर्श, स्वाइप) के माध्यम से एक्सेसिबिलिटी फ़ोकस को स्थानांतरित करता है, और स्क्रीन रीडर फ़ोकस के तहत तत्व की घोषणा करता है। नेविगेशन क्रम डिफ़ॉल्ट रूप से दृश्य क्रम का अनुसरण करता है: बाएँ से दाएँ, ऊपर से नीचे। डेवलपर जटिल लेआउट के लिए इस क्रम को ओवरराइड कर सकता है।
स्क्रीन रीडर विभिन्न नेविगेशन मोड का भी समर्थन करता है जिसे उपयोगकर्ता रोटर (VoiceOver) या मेनू (TalkBack) के माध्यम से स्विच करता है: शीर्षकों, लिंक्स, अक्षरों, शब्दों, फ़ॉर्म के अनुसार। शीर्षक मोड में, स्क्रीन रीडर केवल H1–H6 के बीच चलता है — लंबे पृष्ठों और दस्तावेज़ों में कुशल नेविगेशन के लिए यह महत्वपूर्ण है। अक्षर मोड पुष्टिकरण कोड या जटिल पासवर्ड दर्ज करते समय मदद करता है, प्रत्येक अक्षर को अलग-अलग उच्चारित करता है।
दो स्क्रीन रीडर मोबाइल प्लेटफ़ॉर्म पर हावी हैं: iOS पर VoiceOver और Android पर TalkBack। उनके अलग-अलग API, जेस्चर और क्षमताएँ हैं, लेकिन सामान्य सिद्धांत एक्सेसिबिलिटी ट्री पढ़ना और जेस्चर नियंत्रण है।
VoiceOver Apple का स्क्रीन रीडर है, जो iOS, iPadOS और macOS में निर्मित है। यह तत्वों के बारे में जानकारी प्राप्त करने के लिए UIAccessibility API का उपयोग करता है और नेविगेशन मोड स्विच करने के लिए रोटर का समर्थन करता है। VoiceOver iCloud (डिवाइसों के बीच सेटिंग्स सिंक), Apple Pay (Touch ID या Face ID के माध्यम से भुगतान पुष्टि) और डायनामिक टेक्स्ट (फ़ॉन्ट उपयोगकर्ता सेटिंग्स के अनुकूल होता है) के साथ एकीकृत है।
VoiceOver के जेस्चर TalkBack से भिन्न हैं: यह दो-उंगली घुमाव (रोटर), स्क्रीन कर्टन के लिए ट्रिपल-टैप और क्रिया रद्द करने के लिए दो-उंगली डबल-टैप का उपयोग करता है। VoiceOver कस्टम रोटर का समर्थन करता है जिसे डेवलपर UIAccessibilityCustomRotor के माध्यम से जोड़ता है — उदाहरण के लिए, मानक क्रम को छोड़कर ऐप अनुभागों में त्वरित नेविगेशन के लिए।
TalkBack Google का स्क्रीन रीडर है, जो Android Accessibility Suite का हिस्सा है। यह इंटरफ़ेस तक पहुँचने के लिए AccessibilityService और AccessibilityNodeInfo का उपयोग करता है। TalkBack L-आकार के स्वाइप के माध्यम से वैश्विक मेनू, तत्वों के लिए कस्टम क्रियाएँ और डायनामिक अपडेट के लिए LiveRegion का समर्थन करता है। Android 14 से शुरू करके, TalkBack ने एक-हाथ के जेस्चर समर्थन और Google Assistant के साथ बेहतर एकीकरण प्राप्त किया।
TalkBack में VoiceOver की तुलना में अधिक लचीली जेस्चर प्रणाली है: उपयोगकर्ता किसी भी क्रिया के लिए लगभग किसी भी जेस्चर को निर्दिष्ट कर सकता है। TalkBack ऑन-स्क्रीन ब्रेल इनपुट (BrailleBack) का भी समर्थन करता है — उपयोगकर्ता प्रति उंगली एक विशेष 3×2 लेआउट में सीधे टचस्क्रीन पर ब्रेल अक्षरों के साथ टेक्स्ट दर्ज करता है, जो ऑन-स्क्रीन कीबोर्ड की तुलना में टेक्स्ट प्रविष्टि को काफी तेज करता है।
| विशेषता | VoiceOver (iOS) | TalkBack (Android) |
|---|---|---|
| API | UIAccessibility | AccessibilityService |
| नेविगेशन | रोटर (2 उंगलियाँ) | वैश्विक मेनू (L-स्वाइप) |
| भाषाएँ | 40+ | 30+ |
| कस्टम क्रियाएँ | UIAccessibilityCustomRotor | AccessibilityDelegate |
| ब्रेल | बाहरी डिस्प्ले | BrailleBack + बाहरी |
| डायनामिक अपडेट | UIAccessibility.post | accessibilityLiveRegion |
VoiceOver और TalkBack के अलावा, कम सामान्य मोबाइल स्क्रीन रीडर भी हैं: Select to Speak (Android, चयनित क्षेत्र बोलता है), Samsung Voice Assistant (One UI के साथ Samsung डिवाइसों पर TalkBack को बदलता है) और विशिष्ट क्षेत्रों के लिए तृतीय-पक्ष समाधान — उदाहरण के लिए, Google सेवाओं के बिना चीनी स्मार्टफ़ोन उपयोगकर्ताओं के लिए।
स्क्रीन रीडर की ऐप के UI घटकों तक सीधी पहुँच नहीं होती। इसके बजाय, यह एक परत — ऑपरेटिंग सिस्टम के एक्सेसिबिलिटी API — के माध्यम से काम करता है। ऑपरेटिंग सिस्टम एक एक्सेसिबिलिटी ट्री (Accessibility Tree) बनाता है जिसे स्क्रीन रीडर ट्रैवर्स और विश्लेषित करता है।
iOS पर, एक्सेसिबिलिटी ट्री स्क्रीन पर प्रत्येक View के अनुरूप UIAccessibilityElement ऑब्जेक्ट से बनता है। प्रत्येक तत्व में label (मुख्य टेक्स्ट), traits (तत्व प्रकार: बटन, शीर्षक, लिंक), hint (टूलटिप), value (स्लाइडर और संकेतकों के लिए वर्तमान मान) और frame (स्पर्श क्षेत्र) होता है। सिस्टम मानक UI घटकों के लिए स्वचालित रूप से तत्व बनाता है, लेकिन डेवलपर उन्हें जोड़ और अनुकूलित कर सकता है।
Android पर, एक्सेसिबिलिटी ट्री AccessibilityNodeInfo ऑब्जेक्ट से बनता है। प्रत्येक नोड में होता है: text (टेक्स्ट या contentDescription), className (तत्व प्रकार), contentDescription (विवरण), stateDescription (स्थिति), isEnabled, isChecked, isClickable और अन्य फ़्लैग। Android AccessibilityAction का भी समर्थन करता है — क्रियाओं की एक सूची जो स्क्रीन रीडर उपयोगकर्ता की ओर से निष्पादित कर सकता है: क्लिक, लॉन्ग प्रेस, स्क्रॉल, फ़ोकस सेट करना, टेक्स्ट सेट करना।
जब इंटरफ़ेस में कोई परिवर्तन होता है (कोई नया तत्व दिखाई देता है, टेक्स्ट बदलता है, कोई तत्व दृश्य या अदृश्य हो जाता है), ऑपरेटिंग सिस्टम एक AccessibilityEvent भेजता है। स्क्रीन रीडर इन इवेंट की सदस्यता लेता है और उन पर प्रतिक्रिया करता है: उदाहरण के लिए, जब कोई डायलॉग दिखाई देता है, स्क्रीन रीडर स्वचालित रूप से फ़ोकस को उसके शीर्षक पर ले जाता है और सामग्री की घोषणा करता है।
// Android पर एक्सेसिबिलिटी इवेंट सुनना
class CustomAccessibilityService : AccessibilityService() {
override fun onAccessibilityEvent(event: AccessibilityEvent?) {
event ?: return
when (event.eventType) {
TYPE_VIEW_CLICKED ->
handleClick(event)
TYPE_WINDOW_STATE_CHANGED ->
handleWindowChange(event)
TYPE_VIEW_TEXT_CHANGED ->
handleTextChange(event)
}
}
}
iOS पर, समान इवेंट UIAccessibility.Notification के माध्यम से संभाले जाते हैं: layoutChanged (लेआउट बदल गया), screenChanged (पूरी तरह से नई स्क्रीन), announcement (कस्टम घोषणा), pageScrolled (पृष्ठ स्क्रॉल)। डेवलपर UIAccessibility.post के माध्यम से ये इवेंट भेजता है ताकि स्क्रीन रीडर परिवर्तनों पर सही ढंग से प्रतिक्रिया करे। उदाहरण के लिए, मॉडल विंडो खोलते समय, नए शीर्षक के साथ screenChanged भेजना आवश्यक है — अन्यथा VoiceOver विंडो के नीचे पिछले तत्व पर बना रहेगा।
एक सुलभ ऐप बनाने का मतलब हर तत्व में contentDescription जोड़ना नहीं है — बल्कि गैर-दृश्य इंटरैक्शन के लिए उपयोगकर्ता अनुभव डिज़ाइन करना है। मूल नियम दोनों प्लेटफ़ॉर्म के लिए समान हैं, हालाँकि कार्यान्वयन भिन्न है।
सभी इंटरैक्टिव तत्वों में सार्थक विवरण होना चाहिए: एक “सबमिट” बटन को “सबमिट संदेश” के रूप में वर्णित किया जाना चाहिए, न कि केवल “बटन”। सजावटी तत्व (सेपरेटर, पृष्ठभूमि चित्र, गैर-कार्यात्मक आइकन) को स्क्रीन रीडर से छिपाया जाना चाहिए। नेविगेशन क्रम स्क्रीन के तार्किक प्रवाह का अनुसरण करना चाहिए, दृश्य लेआउट का नहीं। टेक्स्ट कंट्रास्ट मुख्य टेक्स्ट के लिए कम से कम 4.5:1 और बड़े टेक्स्ट के लिए 3:1 (WCAG AA) होना चाहिए।
// iOS: जटिल तत्व के लिए सही कॉन्फ़िगरेशन
let customControl = UIControl()
customControl.isAccessibilityElement = true
customControl.accessibilityLabel = "ध्वनि वॉल्यूम"
customControl.accessibilityValue = "75 प्रतिशत"
customControl.accessibilityTraits = [
.adjustable,
.button
]
customControl.accessibilityHint =
"वॉल्यूम बढ़ाता या घटाता है"
// मान बदलने पर अपडेट
func didChangeVolume(newValue: Float) {
customControl.accessibilityValue =
"\(Int(newValue)) प्रतिशत"
UIAccessibility.post(
notification: .layoutChanged,
argument: customControl
)
}
iOS पर, isAccessibilityElement फ़्लैग कस्टम तत्वों के लिए VoiceOver समर्थन सक्षम करता है। traits संयोजन (.adjustable + .button) VoiceOver को बताता है कि तत्व को ऊपर/नीचे स्वाइप करके समायोजित किया जा सकता है और डबल-टैप द्वारा सक्रिय किया जा सकता है। मान बदलने के बाद, एक layoutChanged सूचना भेजी जानी चाहिए — अन्यथा VoiceOver पुराने मान की घोषणा करता रहेगा।
iOS के लिए: पढ़ने के क्रम को ओवरराइड करने के लिए accessibilityElements, संदर्भ मेनू में अतिरिक्त क्रियाओं के लिए accessibilityCustomActions और तत्वों को तार्किक समूहों में समूहित करने के लिए shouldGroupAccessibilityChildren का उपयोग करें। SwiftUI के लिए, .accessibilityLabel(), .accessibilityAddTraits() और .accessibilityRespondsToUserInteraction() मॉडिफ़ायर का उपयोग करें। इंटरैक्टिव चाइल्ड तत्वों वाले कंटेनरों पर isAccessibilityElement = false सेट करने से बचें — यह उन्हें VoiceOver से छिपा देगा।
Android के लिए: नेविगेशन क्रम के लिए accessibilityTraversalBefore और accessibilityTraversalAfter, कस्टम तत्वों के लिए AccessibilityDelegate और डायनामिक अपडेट के लिए LiveRegion (polite/assertive) का उपयोग करें। Compose में, contentDescription, stateDescription और customActions के साथ .semantics {} मॉडिफ़ायर का उपयोग करें। गैर-इंटरैक्टिव तत्वों पर focusable = true सेट करने से बचें — यह TalkBack के लिए झूठे फ़ोकस बिंदु बनाता है और उपयोगकर्ता को भ्रमित करता है।
स्क्रीन रीडर के साथ परीक्षण भौतिक डिवाइस पर किया जाना चाहिए। एमुलेटर/सिम्युलेटर बुनियादी समझ प्रदान करता है, लेकिन जेस्चर और प्रतिक्रिया गति भिन्न होती है। iOS के लिए Accessibility Inspector (Xcode) और स्वचालित समस्या पहचान के लिए Accessibility Scanner (Android) का उपयोग करें।
मुख्य परीक्षण परिदृश्य: पंजीकरण (फ़ॉर्म भरना, सत्यापन, सबमिशन), खोज और कैटलॉग नेविगेशन, चेकआउट, पासवर्ड रिकवरी। प्रत्येक परिदृश्य बिना दृश्य नियंत्रण के पूरा होने योग्य होना चाहिए — केवल स्क्रीन रीडर वॉइस प्रॉम्प्ट के माध्यम से। यदि कोई स्क्रीन रीडर उपयोगकर्ता किसी परिदृश्य को सामान्य उपयोगकर्ता के समान समय (±50%) में पूरा नहीं कर सकता, तो ऐप में एक्सेसिबिलिटी सुधार की आवश्यकता है।
अक्सर पूछे जाने वाले प्रश्न
यह एक प्रोग्राम है जो स्मार्टफ़ोन स्क्रीन पर होने वाली हर चीज़ बोलता है: टेक्स्ट, बटन, सूचनाएँ। उपयोगकर्ता जेस्चर के साथ डिवाइस को नियंत्रित करता है — किसी तत्व को छूकर उसका नाम सुनता है, और उसे सक्रिय करने के लिए डबल-टैप करता है। Screen Reader दृष्टि को आवाज़ से बदल देता है।
iOS पर — VoiceOver (Apple का अंतर्निहित सिस्टम स्क्रीन रीडर)। Android पर — TalkBack (Google के Android Accessibility Suite का हिस्सा)। दोनों जेस्चर नियंत्रण, वॉइस फ़ीडबैक और Bluetooth के माध्यम से ब्रेल डिस्प्ले का समर्थन करते हैं।
सभी इंटरैक्टिव तत्वों के लिए contentDescription (Android) या accessibilityLabel (iOS) सेट करें। सजावटी तत्वों को स्क्रीन रीडर से छिपाएँ। डायनामिक परिवर्तनों पर सूचनाएँ भेजें। भौतिक डिवाइस पर बिना दृश्य नियंत्रण के स्क्रीन रीडर चालू करके परीक्षण करें।
मुख्य अंतर API और जेस्चर में है। VoiceOver iOS पर UIAccessibility और नेविगेशन के लिए रोटर (दो-उंगली घुमाव) का उपयोग करता है। TalkBack Android पर AccessibilityService और L-आकार के स्वाइप के माध्यम से वैश्विक मेनू का उपयोग करता है। कार्य सिद्धांत — एक्सेसिबिलिटी ट्री को ट्रैवर्स करना — समान है।
स्क्रीन रीडर किसी चित्र को “देख” नहीं सकता। यह डेवलपर द्वारा contentDescription (Android) या accessibilityLabel (iOS) के माध्यम से दिए गए टेक्स्ट विवरण को पढ़ता है। यदि कोई विवरण सेट नहीं है, तो स्क्रीन रीडर फ़ाइल नाम पढ़ सकता है या बस “चित्र” कह सकता है — जो उपयोगकर्ता के लिए बेकार है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें