टच डिवाइस

Android, कई तरह की टच स्क्रीन और टच पैड के साथ काम करता है. इनमें स्टाइलस पर आधारित डिजिटाइज़र टैबलेट भी शामिल हैं.

टच स्क्रीन ऐसे टच डिवाइस होते हैं जो किसी डिसप्ले से जुड़े होते हैं उपयोगकर्ता को ऐसा लगता है कि वह स्क्रीन पर मौजूद आइटम के साथ सीधे तौर पर छेड़छाड़ कर रहा है.

टच पैड ऐसे टच डिवाइस होते हैं जो किसी डिसप्ले से नहीं जुड़े होते हैं, जैसे कि डिजिटाइज़र टैबलेट. टच पैड आम तौर पर पॉइंटिंग या यूज़र इंटरफ़ेस की पूरी तरह से इनडायरेक्ट पोज़िशनिंग या जेस्चर के आधार पर कंट्रोल करना.

टच डिवाइसों में ऐसे बटन हो सकते हैं जिनके फ़ंक्शन माउस बटन से मिलते-जुलते होते हैं.

टच डिवाइसों में कभी-कभी कई तरह के टूल का इस्तेमाल करके बदलाव किया जा सकता है जैसे कि उंगलियां या स्टाइलस, जो स्क्रीन पर मौजूद टच सेंसर टेक्नोलॉजी पर निर्भर करते हैं.

कभी-कभी टच डिवाइसों का इस्तेमाल, वर्चुअल बटन लागू करने के लिए किया जाता है. उदाहरण के लिए, चालू कुछ Android डिवाइसों में टचस्क्रीन सेंसर का इस्तेमाल करके, डिस्प्ले और टच सेंसिटिव की पैड के हिस्से के तौर पर ड्यूअल फ़ंक्शन इस्तेमाल करता है.

कई तरह के टच डिवाइसों की वजह से, Android कई चीज़ों पर निर्भर करता है विशेषताओं और मनचाहे व्यवहार के बारे में बताने के लिए कॉन्फ़िगरेशन प्रॉपर्टी हर डिवाइस के लिए उपलब्ध है.

टच डिवाइस की कैटगरी तय करना

किसी इनपुट डिवाइस को मल्टी-टच डिवाइस के तौर पर तब ही रखा जाता है, जब ये दोनों शर्तें पूरी होती हैं:

  • इनपुट डिवाइस, ABS_MT_POSITION_X और ABS_MT_POSITION_Y कुल ऐक्सिस.
  • इनपुट डिवाइस में कोई गेमपैड बटन नहीं है. इस शर्त से, कुछ गेमपैड से जुड़ी एक समस्या हल हो जाती है. ये गेमपैड, ऐसे कोड के साथ ऐक्सिस की जानकारी देते हैं जो MT ऐक्सिस के कोड से ओवरलैप होते हैं.

किसी इनपुट डिवाइस को सिंगल-टच डिवाइस की कैटगरी में रखा जाता है. ऐसा तब किया जाता है, जब दोनों ये शर्तें लागू हैं:

  • इनपुट डिवाइस को मल्टी-टच डिवाइस के तौर पर नहीं रखा गया है. इनपुट डिवाइस उसे सिंगल-टच डिवाइस या मल्टी-टच डिवाइस की कैटगरी में रखा जाता है, दोनों को नहीं.
  • इनपुट डिवाइस, ABS_X और ABS_Y ऐब्सोलूट ऐक्सिस और BTN_TOUCH की कोड की मौजूदगी की जानकारी देता है.

जब किसी इनपुट डिवाइस को टच डिवाइस के तौर पर कैटगरी में रखा जाता है, तो डिवाइस के लिए वर्चुअल बटन की मैप फ़ाइल को लोड करने की कोशिश करके, वर्चुअल बटन की मौजूदगी का पता लगाया जाता है. अगर वर्चुअल कुंजी वाला मैप उपलब्ध है, तो 'की लेआउट' फ़ाइल भी लोड हो जाती है. इन फ़ाइलों की जगह और फ़ॉर्मैट के बारे में जानने के लिए, [वर्चुअल की मैप फ़ाइलें](#virtual-key-map-files) देखें.

इसके बाद, टच डिवाइस के लिए सिस्टम, इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइल लोड करता है.

पहले से मौजूद सभी टच डिवाइसों में इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलें होनी चाहिए. इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइल मौजूद न होने पर, सिस्टम डिफ़ॉल्ट कॉन्फ़िगरेशन को चुनता है, जो सामान्य कामों के लिए सही होता है टच सहायक डिवाइस, जैसे कि बाहरी यूएसबी या ब्लूटूथ एचआईडी टचस्क्रीन टच पैड का इस्तेमाल करें. इन डिफ़ॉल्ट को पहले से मौजूद टचस्क्रीन और डिवाइस पर की वजह से गलत व्यवहार हो सकता है.

इनपुट डिवाइस का कॉन्फ़िगरेशन लोड होने के बाद, सिस्टम इनपुट डिवाइस को टच स्क्रीन, टच पैड या पॉइंटर डिवाइस के तौर पर बांटता है.

  • टच स्क्रीन डिवाइस का इस्तेमाल, स्क्रीन पर दिख रहे ऑब्जेक्ट में सीधे तौर पर बदलाव करने के लिए किया जाता है स्क्रीन. उपयोगकर्ता सीधे स्क्रीन को छूता है, इसलिए सिस्टम नहीं किसी प्रॉडक्ट को बेचने के लिए, गुमराह किया गया है.
  • किसी टच पैड डिवाइस का इस्तेमाल, पोज़िशन की सटीक जानकारी देने के लिए किया जाता है दिए गए सेंसर एरिया पर टच के बारे में ऐप्लिकेशन को बताता है. यह डिजिटाइज़र टैबलेट के लिए काम का हो सकता है.
  • पॉइंटर डिवाइस का इस्तेमाल क्लिक किया जा सकता है. उंगलियों को मल्टी-टच पॉइंटर के रूप में माना जाता है हाथ के जेस्चर. स्टाइलस जैसे अन्य टूल की व्याख्या करने के लिए, इनका इस्तेमाल किया जाता है कुल पोज़िशन. ज़्यादा जानकारी के लिए, इनडायरेक्ट मल्टी-टच पॉइंटर जेस्चर देखें.

इन नियमों का इस्तेमाल, इनपुट डिवाइस को टच स्क्रीन, टच पैड या पॉइंटर डिवाइस के तौर पर बांटने के लिए किया जाता है.

  • अगर touch.deviceType प्रॉपर्टी सेट की गई है, तो डिवाइस टाइप जैसा बताया गया है.
  • अगर इनपुट डिवाइस, INPUT_PROP_DIRECT की मौजूदगी की रिपोर्ट करता है EVIOCGPROP ioctl की मदद से इनपुट प्रॉपर्टी का इस्तेमाल करने के बाद, डिवाइस का टाइप टच स्क्रीन पर सेट हो. इस शर्त के मुताबिक, यह माना जाता है कि डायरेक्ट इनपुट टच डिवाइस, किसी ऐसे डिसप्ले से कनेक्ट किए गए हैं जो भी कनेक्ट है.
  • अगर इनपुट डिवाइस, EVIOCGPROP ioctl के ज़रिए INPUT_PROP_POINTER इनपुट प्रॉपर्टी की मौजूदगी की जानकारी देता है, तो डिवाइस टाइप को पॉइंटर पर सेट किया जाता है.
  • अगर इनपुट डिवाइस, REL_X या REL_Y के रिलेटिव ऐक्सिस की मौजूदगी की जानकारी देता है, तो डिवाइस टाइप को टच पैड पर सेट किया जाता है. इस शर्त से, उन इनपुट डिवाइसों के लिए अस्पष्टता को हल किया जाता है जिनमें माउस और टच पैड, दोनों होते हैं. इस स्थिति में, टच पैड का इस्तेमाल कंट्रोल के लिए नहीं किया जाता पॉइंटर क्योंकि माउस पहले से ही उसे नियंत्रित करता है.
  • ऐसा न करने पर, डिवाइस टाइप पॉइंटर पर सेट हो जाता है. इस डिफ़ॉल्ट से यह पक्का होता है कि जिन टच पैड को किसी खास काम के लिए तय नहीं किया गया है वे पॉइंटर को कंट्रोल करते हैं.

बटन

बटन के तौर पर दिया गया कंट्रोल ज़रूरी नहीं है. इसका इस्तेमाल ऐप्लिकेशन कर सकते हैं अतिरिक्त फ़ंक्शन का इस्तेमाल करना चाहिए. टच डिवाइस पर मौजूद बटन, माउस की तरह काम करते हैं बटन होते हैं और इनका उपयोग मुख्य रूप से पॉइंटर प्रकार के टच डिवाइस के साथ या स्टाइलस.

ये बटन काम करते हैं:

  • BTN_LEFT: MotionEvent.BUTTON_PRIMARY पर मैप किया गया.
  • BTN_RIGHT: MotionEvent.BUTTON_SECONDARY पर मैप किया गया.
  • BTN_MIDDLE: MotionEvent.BUTTON_MIDDLE पर मैप किया गया.
  • BTN_BACK और BTN_SIDE: MotionEvent.BUTTON_BACK पर मैप किए गए. इस बटन को दबाने पर, की कोड KeyEvent.KEYCODE_BACK के साथ एक बटन दबाने की कार्रवाई भी होती है.
  • BTN_FORWARD और BTN_EXTRA: इन्हें MotionEvent.BUTTON_FORWARD पर मैप किया गया है. इस बटन को दबाने पर, की कोड KeyEvent.KEYCODE_FORWARD के साथ एक बटन दबाने की जानकारी भी भेजी जाती है.
  • BTN_STYLUS: MotionEvent.BUTTON_SECONDARY पर मैप किया गया.
  • BTN_STYLUS2: MotionEvent.BUTTON_TERTIARY पर मैप किया गया.

टूल और टूल टाइप

टूल, उंगली, स्टाइलस या कोई ऐसा अन्य उपकरण होता है जिसका इस्तेमाल टच डिवाइस के साथ इंटरैक्ट करने के लिए किया जाता है. कुछ टच डिवाइस अलग-अलग किस तरह के टूल हैं.

Android के अन्य हिस्सों में, जैसे कि MotionEvent API में, किसी टूल को अक्सर पॉइंटर कहा जाता है.

नीचे दिए गए टूल टाइप का इस्तेमाल किया जा सकता है:

  • BTN_TOOL_FINGER और MT_TOOL_FINGER: इस पर मैप किया गया MotionEvent.TOOL_TYPE_FINGER.
  • BTN_TOOL_PEN और MT_TOOL_PEN: इस पर मैप किया गया MotionEvent.TOOL_TYPE_STYLUS.
  • BTN_TOOL_RUBBER: MotionEvent.TOOL_TYPE_ERASER पर मैप किया गया.
  • BTN_TOOL_BRUSH: MotionEvent.TOOL_TYPE_STYLUS पर मैप किया गया.
  • BTN_TOOL_PENCIL: MotionEvent.TOOL_TYPE_STYLUS पर मैप किया गया.
  • BTN_TOOL_AIRBRUSH: MotionEvent.TOOL_TYPE_STYLUS पर मैप किया गया.
  • BTN_TOOL_MOUSE: MotionEvent.TOOL_TYPE_MOUSE पर मैप किया गया.
  • BTN_TOOL_LENS: MotionEvent.TOOL_TYPE_MOUSE पर मैप किया गया.
  • BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, और BTN_TOOL_QUADTAP: MotionEvent.TOOL_TYPE_FINGER से मैप किए गए.

होवर करने बनाम छूने वाले टूल

टूल, टच डिवाइस से संपर्क में हो सकते हैं या रेंज में हों और उसके ऊपर होवर कर रहे हों. सभी टच डिवाइसों पर, टूल के टच डिवाइस के ऊपर घूमने की जानकारी नहीं मिलती. आरएफ़-आधारित स्टाइलस डिजिटाइज़र जैसे डिवाइसों में, अक्सर यह पता चल जाता है कि टूल डिजिटाइज़र की तय सीमा में है या नहीं.

InputReader कॉम्पोनेंट, टच करने वाले टूल को कर्सर घुमाने वाले टूल से अलग करता है. इसी तरह, टच करने वाले टूल और कर्सर घुमाने वाले टूल की रिपोर्ट, ऐप्लिकेशन को अलग-अलग तरीकों से दी जाती है.

ऐप्लिकेशन को, टच करने वाले टूल, टच इवेंट के तौर पर रिपोर्ट किए जाते हैं MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE, का इस्तेमाल करके MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN और MotionEvent.ACTION_POINTER_UP.

होवर करने वाले टूल को MotionEvent.ACTION_HOVER_ENTER, MotionEvent.ACTION_HOVER_MOVE, और MotionEvent.ACTION_HOVER_EXIT.

टच डिवाइस ड्राइवर से जुड़ी ज़रूरी शर्तें

  • टच डिवाइस ड्राइवर को सिर्फ़ ऐक्सिस के लिए, ऐक्सिस और कुंजी कोड रजिस्टर करने चाहिए और बटन होते हैं जिन पर ये काम करते हैं. काम न करने वाले ऐक्सिस या कुंजी कोड को रजिस्टर करना डिवाइस की कैटगरी तय करने वाले एल्गोरिदम को भ्रम में डाल सकता है या इसकी वजह से सिस्टम में गड़बड़ी हो सकती है डिवाइस की क्षमताओं का पता लगा सकता है. उदाहरण के लिए, अगर डिवाइस BTN_TOUCH कुंजी का कोड, सिस्टम यह मानता है कि BTN_TOUCH का इस्तेमाल हमेशा यह बताने के लिए किया जाता है कि टूल स्क्रीन को छूना. इसलिए, BTN_TOUCH का इस्तेमाल कि टूल सिर्फ़ रेंज में हो और घूम रहा हो.
  • सिंगल-टच डिवाइस, Linux इनपुट इवेंट का इस्तेमाल करते हैं:
    • ABS_X: (ज़रूरी है) टूल के X निर्देशांक की जानकारी देता है.
    • ABS_Y: (ज़रूरी है) टूल के Y निर्देशांक की रिपोर्ट करता है.
    • ABS_PRESSURE: (ज़रूरी नहीं) सलाह के ऊपर लगे शरीर के दबाव की रिपोर्ट करता है या टच कॉन्टैक्ट की सिग्नल क्षमता का इस्तेमाल किया जाता है.
    • ABS_TOOL_WIDTH: (वैकल्पिक) क्रॉस-सेक्शनल एरिया या चौड़ाई की रिपोर्ट करता है टच संपर्क या टूल के संपर्क के रूप में दिखता है.
    • ABS_DISTANCE: (ज़रूरी नहीं) सतह से टूल की दूरी की जानकारी देता है टच डिवाइस के लिए.
    • ABS_TILT_X: (ज़रूरी नहीं) टूल के झुकाव की जानकारी देता है. यह जानकारी, टच डिवाइस के सतह से, एक्स ऐक्सिस के साथ मिलकर मिलती है.
    • ABS_TILT_Y: (ज़रूरी नहीं) टूल के झुकाव की जानकारी देता है. यह जानकारी, टच डिवाइस के सतह से वाई ऐक्सिस के साथ मिलकर मिलती है.
    • BTN_TOUCH: (ज़रूरी है) यह बताता है कि टूल डिवाइस.
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (ज़रूरी नहीं) रिपोर्ट बटन की स्थिति बताती है.
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (ज़रूरी नहीं) टूल टाइप की जानकारी देता है.
  • मल्टी-टच डिवाइस इन Linux इनपुट इवेंट का इस्तेमाल करते हैं:
    • ABS_MT_POSITION_X: (ज़रूरी है) टूल के X निर्देशांक की जानकारी देता है.
    • ABS_MT_POSITION_Y: (ज़रूरी है) टूल के Y निर्देशांक की जानकारी देता है.
    • ABS_MT_PRESSURE: (ज़रूरी नहीं) यह रिपोर्ट, शरीर के दबाव की जानकारी देती है या टच कॉन्टैक्ट की सिग्नल क्षमता.
    • ABS_MT_TOUCH_MAJOR: (ज़रूरी नहीं) यह विकल्प चुनने पर, स्पर्श संपर्क, या स्पर्श संपर्क के लंबे आयाम की लंबाई.
    • ABS_MT_TOUCH_MINOR: (ज़रूरी नहीं) टच संपर्क के छोटे डाइमेंशन की लंबाई की जानकारी देता है. अगर ABS_MT_TOUCH_MAJOR किसी क्षेत्र के मेज़रमेंट की रिपोर्ट कर रहा है, तो इस ऐक्सिस का इस्तेमाल नहीं किया जाना चाहिए.
    • ABS_MT_WIDTH_MAJOR: (ज़रूरी नहीं) इससे टूल के क्रॉस-सेक्शनल एरिया या टूल के लंबे डाइमेंशन की लंबाई की जानकारी मिलती है. इस ऐक्सिस का इस्तेमाल न करें अगर आपको टूल के डाइमेंशन के बारे में पता नहीं है.
    • ABS_MT_WIDTH_MINOR: (ज़रूरी नहीं) टूल के छोटे डाइमेंशन की लंबाई की जानकारी देता है. अगर ABS_MT_WIDTH_MAJOR रिपोर्ट कर रहा है, तो इस ऐक्सिस का इस्तेमाल नहीं किया जाना चाहिए किसी एरिया मेज़रमेंट या टूल के डाइमेंशन की जानकारी नहीं है.
    • ABS_MT_ORIENTATION: (ज़रूरी नहीं) टूल के ओरिएंटेशन की जानकारी देता है.
    • ABS_MT_DISTANCE: (ज़रूरी नहीं) टूल के टच डिवाइस के ऊपरी हिस्से से होने वाली दूरी की जानकारी देता है.
    • ABS_MT_TOOL_TYPE: (ज़रूरी नहीं) टूल टाइप को इसके तौर पर इस्तेमाल करें MT_TOOL_FINGER या MT_TOOL_PEN.
    • ABS_MT_TRACKING_ID: (ज़रूरी नहीं) टूल के ट्रैकिंग आईडी की जानकारी देता है. ट्रैकिंग आईडी एक आर्बिट्रेरी गैर-ऋणात्मक पूर्णांक होता है, जिसका इस्तेमाल और जब कई टूल चालू हों, तो हर टूल को अलग से ट्रैक करें. उदाहरण के लिए, जब डिवाइस को एक से ज़्यादा उंगलियों से छुएं, तो हर उंगली के लिए अलग-अलग ट्रैकिंग आईडी का इस्तेमाल करें. इसका इस्तेमाल तब तक किया जाता है, जब तक आपकी उंगली संपर्क में रहती है. ट्रैकिंग आईडी का फिर से इस्तेमाल तब किया जा सकता है, जब उनसे जुड़े टूल रेंज से बाहर हो जाएं.
    • ABS_MT_SLOT: (ज़रूरी नहीं) टूल का इस्तेमाल करते समय, टूल के स्लॉट आईडी की जानकारी देता है Linux मल्टी-टच प्रोटोकॉल 'B'. Linux मल्टी-टच प्रोटोकॉल से जुड़े दस्तावेज़ देखें देखें.
    • BTN_TOUCH: (ज़रूरी है) इससे पता चलता है कि टूल, डिवाइस को छू रहा है या नहीं.
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (ज़रूरी नहीं) रिपोर्ट बटन की स्थिति बताती है.
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (ज़रूरी नहीं) टूल टाइप की जानकारी देता है.
  • अगर सिंगल-टच और मल्टी-टच प्रोटोकॉल, दोनों के लिए ऐक्सिस तय किए गए हैं, तो सिर्फ़ मल्टी-टच ऐक्सिस का इस्तेमाल किया जाता है और सिंगल-टच ऐक्सिस को अनदेखा किया जाता है.
  • ABS_X, ABS_Y, ABS_MT_POSITION_X, और ABS_MT_POSITION_Y ऐक्सिस की कम से कम और ज़्यादा से ज़्यादा वैल्यू, डिवाइस के ऐक्टिव एरिया के सीमाओं को तय करती हैं. टच स्क्रीन के मामले में, ऐक्टिव एरिया, टच डिवाइस के उस हिस्से के बारे में बताता है जो असल में डिसप्ले को कवर करता है.

    टचस्क्रीन के लिए, सिस्टम अपने-आप रिपोर्ट किए गए टच की जानकारी दिखाता है डिसप्ले पिक्सल में टच पोज़िशन पाने के लिए, सतह की इकाइयों में उनकी पोज़िशन नीचे दी गई कैलकुलेशन को ध्यान में रखकर किया जाएगा:

        displayX = (x - minX) * displayWidth / (maxX - minX + 1)
        displayY = (y - minY) * displayHeight / (maxY - minY + 1)
        

    टच स्क्रीन, रिपोर्ट किए गए ऐक्टिव एरिया के बाहर टच की रिपोर्ट कर सकती है.

    ऐक्टिव एरिया से बाहर शुरू किए गए टच, ऐप्लिकेशन में डिलीवर नहीं होते हालांकि, इसका इस्तेमाल वर्चुअल बटन के लिए किया जा सकता है.

    ऐसे टच जो ऐक्टिव एरिया के अंदर से शुरू होते हैं या डिसप्ले में आते हैं या उससे बाहर निकलते हैं एरिया, ऐप्लिकेशन में ही डिलीवर किया जाता है. इस वजह से, अगर कोई टच किसी ऐप की सीमाओं से बाहर चला जाता है, यानी ऐप डिसप्ले कोऑर्डिनेट के साथ टच इवेंट मिल सकते हैं. ये कोऑर्डिनेट, नेगेटिव या स्क्रीन की सीमा. ऐसा होना सामान्य है.

    टच डिवाइस को कभी भी टच कोऑर्डिनेट को ऐक्टिव ज़ोन की सीमाओं से नहीं जोड़ना चाहिए क्षेत्र. अगर कोई टच ऐक्टिव एरिया से बाहर निकलता है, तो उसे ऐक्टिव एरिया से बाहर के तौर पर रिपोर्ट किया जाना चाहिए या उसकी रिपोर्ट नहीं की जानी चाहिए.

    उदाहरण के लिए, अगर उपयोगकर्ता का उंगली टच स्क्रीन के सबसे ऊपर बाएं कोने के पास है, तो यह (minX, minY) का कोऑर्डिनेट दिखा सकता है. अगर उंगली के बटन से उंगली हटा ली जाती है, तो ऐक्टिव एरिया से बाहर निकलने के लिए, टचस्क्रीन को चालू करें minX और minY से कम घटकों के साथ रिपोर्टिंग कोऑर्डिनेट हैं, जैसे (minX - 2, minY - 3) या इसे टच की रिपोर्टिंग पूरी तरह से बंद हो जानी चाहिए. दूसरे शब्दों में, टच स्क्रीन से रिपोर्ट नहीं होनी चाहिए (minX, minY) जब उपयोगकर्ता की उंगली ऐक्टिव एरिया से बाहर छू रही हो.

    टच निर्देशांक को डिसप्ले के किनारे से जोड़ने से एक आर्टिफ़िशियल इंटेलिजेंस बनती है स्क्रीन के किनारे पर हार्ड बाउंड्री सेट होती है, जो सिस्टम को गति को आसानी से ट्रैक करने की सुविधा, जो डिसप्ले एरिया की सीमाओं से बाहर निकलती या आती है.

  • अगर ABS_PRESSURE या ABS_MT_PRESSURE से कोई वैल्यू रिपोर्ट की जाती है, तो टूल के डिवाइस को छूने पर, वैल्यू शून्य से ज़्यादा होनी चाहिए. इसके अलावा, टूल के हॉवर करने पर, वैल्यू शून्य होनी चाहिए.

    दबाव की जानकारी देना ज़रूरी नहीं है. हालांकि, हमारा सुझाव है कि आप इसे दें. ऐप्लिकेशन, दबाव की जानकारी का इस्तेमाल करके, दबाव के हिसाब से बदलने वाली ड्रॉइंग और अन्य इफ़ेक्ट लागू कर सकते हैं.

  • ABS_TOOL_WIDTH, ABS_MT_TOUCH_MAJOR, और ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR या जब टूलABS_MT_WIDTH_MINOR डिवाइस को छू रहा हो और वैसे ही बिना डिवाइस को छू रहा हो. हालांकि, यह ज़रूरी नहीं है. उदाहरण के लिए, हो सकता है कि टच डिवाइस, उंगली से किए गए टच के साइज़ का पता लगा पाए, लेकिन स्टाइलस से किए गए टच के साइज़ का पता न लगा पाए.

    रिपोर्ट के साइज़ की जानकारी देना ज़रूरी नहीं है. हालांकि, इसका सुझाव दिया जाता है. साइज़ सेंसिटिव ड्रॉइंग को लागू करने के लिए, दबाव से जुड़ी जानकारी का इस्तेमाल ऐप्लिकेशन कर सकते हैं और अन्य इफ़ेक्ट.

  • जब टूल डिवाइस को छू रहा हो, तो ABS_DISTANCE या ABS_MT_DISTANCE से रिपोर्ट की गई वैल्यू, शून्य के करीब होनी चाहिए. दूरी शून्य के अलावा शून्य नहीं हो सकती भले ही, टूल सीधे उनके संपर्क में हो. रिपोर्ट की गई सटीक वैल्यू, इस बात पर निर्भर करती है कि हार्डवेयर, दूरी का आकलन कैसे करता है.

    दूरी की रिपोर्ट करना वैकल्पिक है, लेकिन इनके लिए सुझाया जाता है स्टाइलस डिवाइस.

  • जब टूल, डिवाइस के लंबवत हो, तो ABS_TILT_X और ABS_TILT_Y से रिपोर्ट की गई वैल्यू शून्य होनी चाहिए. शून्य के अलावा झुकाव का मतलब है कि यह पक्का करने के लिए कि टूल किसी ऊंची जगह पर रखा गया हो.

    X और Y ऐक्सिस के साथ-साथ झुकाने के ऐंगल को डिग्री में दिया गया माना जाता है लंबवत से. हर अक्ष के लिए, केंद्र बिंदु (पूरी तरह से लंबवत) को (max + min) / 2 से दिया जाता है. मान, केंद्र बिंदु से छोटे हैं ऊपर या बाईं ओर झुकाने की वैल्यू दिखाते हैं. ये वैल्यू, सेंटर पॉइंट से बड़ी होती हैं नीचे या दाईं ओर के झुकाव को दिखाता है.

    InputReader, X और Y टिल कॉम्पोनेंट को लंबवत टिल ऐंगल में बदलता है. यह ऐंगल 0 से PI / 2 रेडियन तक होता है. साथ ही, यह प्लैनर ओरिएंटेशन ऐंगल को -PI से PI रेडियन तक बदलता है. इस तरीके से, ऑरिएंटेशन के बारे में ऐसा ब्यौरा मिलता है जो उंगलियों के टच के बारे में बताने वाले ब्यौरे के साथ काम करता है.

    झुकाने की जानकारी के बारे में रिपोर्ट करना ज़रूरी नहीं है. हालांकि, स्टाइलस डिवाइसों के लिए इसका सुझाव दिया जाता है.

  • अगर टूल टाइप की जानकारी ABS_MT_TOOL_TYPE से रिपोर्ट की जाती है, तो यह BTN_TOOL_* से रिपोर्ट की गई टूल टाइप की जानकारी की जगह ले लेती है. अगर टूल टाइप की कोई जानकारी उपलब्ध नहीं है, तो टूल टाइप डिफ़ॉल्ट रूप से MotionEvent.TOOL_TYPE_FINGER पर सेट हो जाता है.

  • किसी टूल के चालू होने की स्थिति, इन बातों के आधार पर तय की जाती है:

    • सिंगल-टच प्रोटोकॉल का इस्तेमाल करते समय, BTN_TOUCH या BTN_TOOL_* के 1 होने पर टूल चालू होता है.

      इस शर्त का मतलब है कि InputReader में कम से कम कुछ वैल्यू होनी चाहिए इसके बारे में जानकारी कि टूल किस तरह का है, चाहे वह या कम से कम उसका टूल टाइप. अगर कोई जानकारी उपलब्ध नहीं है, तो तो यह मान लिया जाता है कि टूल निष्क्रिय है (सीमा से बाहर है).

    • मल्टी-टच प्रोटोकॉल 'A' का इस्तेमाल करते समय, यह टूल तब चालू होता है, जब यह सबसे हाल की सिंक रिपोर्ट में दिखता है. जब टूल रिपोर्ट सिंक नहीं करता है, तो वह मौजूद नहीं रहेगा.
    • मल्टी-टच प्रोटोकॉल 'B' का इस्तेमाल करने पर, टूल तब तक चालू रहता है, जब तक उसके पास कोई चालू स्लॉट होता है. स्लॉट खाली होने पर, टूल मौजूद नहीं रहता.
  • किसी टूल को इन शर्तों के आधार पर माउस घुमाने के लिए तय किया जाता है:
    • अगर टूल BTN_TOOL_MOUSE या BTN_TOOL_LENS है, तो इसका मतलब है कि टूल कर्सर पर नहीं है. भले ही, इनमें से कोई भी शर्त पूरी हो.
    • अगर टूल चालू है और ड्राइवर, दबाव की जानकारी देता है और दबाव शून्य है, तो इसका मतलब है कि टूल हॉवर कर रहा है.
    • अगर टूल चालू है और ड्राइवर में BTN_TOUCH की कोड की सुविधा काम करती है और BTN_TOUCH की वैल्यू शून्य है, तो इसका मतलब है कि टूल हॉवर कर रहा है.
  • InputReader, मल्टी-टच प्रोटोकॉल 'A' दोनों पर काम करता है और 'B'. नए ड्राइवर को 'B' प्रोटोकॉल का इस्तेमाल करना चाहिए. हालांकि, दोनों में से कोई भी प्रोटोकॉल काम करता है.
  • Android 4.0 और इसके बाद के वर्शन में, टचस्क्रीन ड्राइवर को बदलने की ज़रूरत पड़ सकती है ताकि Linux इनपुट प्रोटोकॉल की ज़रूरी शर्तों का पालन किया जा सके.

    इन बदलावों की ज़रूरत पड़ सकती है:

    • जब कोई टूल इनऐक्टिव हो जाता है (उंगली "ऊपर" हो जाती है), तो वह दिखना बंद हो जाना चाहिए मल्टी-टच सिंक रिपोर्ट में सिंक करने की सुविधा मिलती है. जब सभी टूल बंद हो जाते हैं (सभी उंगलियां "अप" हो जाती हैं), तो ड्राइवर को सिंक रिपोर्ट का खाली पैकेट भेजना चाहिए. जैसे, SYN_MT_REPORT के बाद SYN_REPORT.

      Android के पिछले वर्शन में "ऊपर" होने की उम्मीद है भेजकर रिपोर्ट किए जाने वाले इवेंट 0 का दबाव वैल्यू. पुराना व्यवहार Linux इनपुट प्रोटोकॉल की खास बातें और अब यह काम नहीं करता.

    • शारीरिक दबाव या सिग्नल की क्षमता से जुड़ी जानकारी की रिपोर्ट, इन चीज़ों का इस्तेमाल करके दी जानी चाहिए ABS_MT_PRESSURE.

      Android के पिछले वर्शन में, प्रेशर की जानकारी मिली ABS_MT_TOUCH_MAJOR से. पुराना व्यवहार Linux इनपुट प्रोटोकॉल की खास बातें और अब यह काम नहीं करता.

    • टच साइज़ की जानकारी की रिपोर्ट, ABS_MT_TOUCH_MAJOR का इस्तेमाल करके दी जानी चाहिए.

      Android के पिछले वर्शन, साइज़ की जानकारी ABS_MT_TOOL_MAJOR से हासिल करते थे. पुराना व्यवहार Linux इनपुट प्रोटोकॉल की खास बातें और अब यह काम नहीं करता.

    टच डिवाइस ड्राइवर को अब Android के लिए खास तौर पर सेट किए गए कस्टमाइज़ेशन की ज़रूरत नहीं है. मानक Linux इनपुट प्रोटोकॉल पर भरोसा करके, Android कई तरह के टच सहायक डिवाइस, जैसे कि एक्सटर्नल एचआईडी मल्टी-टच टच स्क्रीन, जिनमें बदलाव न किए गए ड्राइवर इस्तेमाल किए जा रहे हों.

टच डिवाइस पर की जाने वाली कार्रवाई

Android पर टच डिवाइस पर की जाने वाली कार्रवाइयों की खास जानकारी नीचे दी गई है.

  1. EventHub, evdev ड्राइवर के रॉ इवेंट की जानकारी पढ़ता है.
  2. InputReader रॉ इवेंट का इस्तेमाल करता है और इसके बारे में अंदरूनी स्थिति अपडेट करता है हर टूल की पोज़िशन और अन्य विशेषताएं. यह रिपोर्ट, बटन की स्थितियां.
  3. अगर BACK या FORWARD को दबाया या छोड़ा गया था, तो InputReader, InputDispatcher को मुख्य इवेंट के बारे में सूचना देता है.
  4. InputReader से यह पता चलता है कि वर्चुअल बटन दबाया गया या नहीं. अगर ऐसा है, तो यह InputDispatcher को मुख्य इवेंट के बारे में सूचना देता है.
  5. InputReader यह तय करता है कि टच, डिसप्ले के दायरे में हुआ था या नहीं. अगर ऐसा है, तो यह InputDispatcher को इस बारे में सूचना देता है टच इवेंट.
  6. अगर टच करने वाले टूल नहीं हैं, लेकिन कम से कम एक होवरिंग टूल है, तो InputReader, InputDispatcher को होवर इवेंट के बारे में सूचना देता है.
  7. अगर टच डिवाइस टाइप पॉइंटर है, तो InputReader, पॉइंटर जेस्चर का पता लगाता है, पॉइंटर को उसके हिसाब से मूव करता है, और पॉइंटर इवेंट के बारे में InputDispatcher को सूचना देता है.
  8. InputDispatcher, WindowManagerPolicy का इस्तेमाल करके यह पता लगाता है कि क्या इवेंट भेजे जाने चाहिए और यह भी बताया जाना चाहिए कि उन्हें डिवाइस चालू करना है या नहीं. इसके बाद, InputDispatcher इवेंट को सही ऐप्लिकेशन पर डिलीवर करता है.

टच डिवाइस कॉन्फ़िगरेशन

डिवाइस के टच व्यवहार को डिवाइस के ऐक्सिस, बटन, इनपुट प्रॉपर्टी, डिवाइस कॉन्फ़िगरेशन, वर्चुअल की मैप और कुंजी लेआउट इनपुट करें.

कीबोर्ड कॉन्फ़िगरेशन में हिस्सा लेने वाली फ़ाइलों के बारे में ज़्यादा जानकारी के लिए, यहां दिए गए सेक्शन देखें:

प्रॉपर्टी

टच डिवाइस के व्यवहार को कॉन्फ़िगर करने और कैलिब्रेट करने के लिए, सिस्टम कई इनपुट डिवाइस कॉन्फ़िगरेशन प्रॉपर्टी पर निर्भर करता है.

इसकी एक वजह यह है कि टच डिवाइसों के डिवाइस ड्राइवर, अक्सर डिवाइस के हिसाब से यूनिट का इस्तेमाल करके, टच की विशेषताओं की जानकारी देते हैं.

उदाहरण के लिए, कई टच डिवाइस, टच संपर्क एरिया को मापते हैं एक आंतरिक उपकरण-विशिष्ट पैमाने का उपयोग करके, जैसे कि टच से ट्रिगर होने वाले सेंसर नोड. रॉ साइज़ की यह वैल्यू, ऐप्लिकेशन के लिए काम की नहीं होगी. इसकी वजह यह है कि उन्हें टच डिवाइस सेंसर नोड के फ़िज़िकल साइज़ और अन्य विशेषताओं के बारे में जानना होगा.

सिस्टम, टच डिवाइस से रिपोर्ट की गई वैल्यू को डिकोड करने, बदलने, और सामान्य बनाने के लिए, इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलों में एन्कोड किए गए कैलिब्रेशन पैरामीटर का इस्तेमाल करता है. इससे, इन वैल्यू को एक आसान स्टैंडर्ड तरीके से दिखाया जा सकता है, ताकि ऐप्लिकेशन उन्हें समझ सकें.

डॉक्यूमेंटेशन कन्वेंशन

दस्तावेज़ बनाने के लिए, हम कैलिब्रेशन की प्रोसेस के दौरान सिस्टम की इस्तेमाल की गई वैल्यू के बारे में बताने के लिए, इन नियमों का इस्तेमाल करते हैं.

ऐक्सिस की रॉ वैल्यू

यहां दिए गए एक्सप्रेशन, टच डिवाइस ड्राइवर की ओर से EV_ABS इवेंट के तौर पर रिपोर्ट की गई रॉ वैल्यू दिखाते हैं.

raw.x
ABS_X या ABS_MT_POSITION_X ऐक्सिस की वैल्यू.
raw.y
ABS_Y या ABS_MT_POSITION_Y ऐक्सिस की वैल्यू.
raw.pressure
ABS_PRESSURE या ABS_MT_PRESSURE ऐक्सिस की वैल्यू या 0 अगर उपलब्ध नहीं है.
raw.touchMajor
ABS_MT_TOUCH_MAJOR ऐक्सिस की वैल्यू या उपलब्ध न होने पर 0.
raw.touchMinor
ABS_MT_TOUCH_MINOR ऐक्सिस की वैल्यू या उपलब्ध न होने पर raw.touchMajor.
raw.toolMajor
ABS_TOOL_WIDTH या ABS_MT_WIDTH_MAJOR ऐक्सिस की वैल्यू या उपलब्ध न होने पर 0.
raw.toolMinor
ABS_MT_WIDTH_MINOR ऐक्सिस का मान या raw.toolMajor अगर ऐसा नहीं है, तो उपलब्ध हैं.
raw.orientation
ABS_MT_ORIENTATION ऐक्सिस की वैल्यू या उपलब्ध न होने पर 0.
raw.distance
ABS_DISTANCE या ABS_MT_DISTANCE ऐक्सिस की वैल्यू या 0 अगर उपलब्ध नहीं है.
raw.tiltX
ABS_TILT_X ऐक्सिस की वैल्यू या उपलब्ध न होने पर 0.
raw.tiltY
ABS_TILT_Y ऐक्सिस की वैल्यू या उपलब्ध न होने पर 0.

रॉ ऐक्सिस रेंज

नीचे दिए गए एक्सप्रेशन, रॉ वैल्यू के बाउंड दिखाते हैं. इन्हें पाने के लिए, हर अक्ष के लिए EVIOCGABS ioctl को कॉल किया जाता है.

raw.*.min
रॉ अक्ष की कम से कम वैल्यू.
raw.*.max
रॉ ऐक्सिस की ज़्यादा से ज़्यादा वैल्यू शामिल की जा सकती है.
raw.*.range
raw.*.max - raw.*.min के बराबर.
raw.*.fuzz
रॉ ऐक्सिस कितना सटीक है. उदाहरण fuzz = 1 का मतलब है कि वैल्यू +/- 1 यूनिट के लिए सटीक हैं.
raw.width
टच एरिया की चौड़ाई, जो raw.x.range + 1 के बराबर होती है.
raw.height
टच एरिया की ऊंचाई, raw.y.range + 1 के बराबर.

आउटपुट की सीमाएं

नीचे दिए गए एक्सप्रेशन, आउटपुट कोऑर्डिनेट सिस्टम की विशेषताओं के बारे में बताते हैं. सिस्टम, टच डिवाइस के इस्तेमाल किए गए सतह की इकाइयों से, टच की जगह की जानकारी को आउटपुट इकाइयों में बदलने के लिए, लीनियर इंटरपोलेशन का इस्तेमाल करता है. इन इकाइयों को ऐप्लिकेशन को दिखाया जाता है, जैसे कि डिसप्ले पिक्सल.

output.width
आउटपुट की चौड़ाई. टचस्क्रीन (किसी डिसप्ले से जुड़ी) के लिए, यह पिक्सल में डिसप्ले की चौड़ाई है. टच पैड (जो किसी डिसप्ले से नहीं जुड़े हैं) के लिए, आउटपुट की चौड़ाई raw.width के बराबर होती है. इससे पता चलता है कि कोई इंटरपोलेशन नहीं किया गया है.
output.height
आउटपुट की ऊंचाई. डिसप्ले से जुड़ी टचस्क्रीन के लिए, यह डिसप्ले की ऊंचाई होती है. इसे पिक्सल में दिखाया जाता है. टच पैड के लिए (जो डिसप्ले से जुड़े नहीं होते), आउटपुट की ऊंचाई raw.height के बराबर है, जो बताता है कि कोई इंटरपोलेशन नहीं है परफ़ॉर्म किया.
output.diag
आउटपुट निर्देशांक सिस्टम के डायगनल की लंबाई, जो sqrt(output.width ^2 + output.height ^2) के बराबर होती है.

बुनियादी कॉन्फ़िगरेशन

टच इनपुट मैपर, इनपुट डिवाइस में कई कॉन्फ़िगरेशन प्रॉपर्टी का इस्तेमाल करता है कैलिब्रेशन मान दर्ज करने के लिए कॉन्फ़िगरेशन फ़ाइल. नीचे दी गई टेबल में, सामान्य मकसद के लिए कॉन्फ़िगरेशन की कुछ प्रॉपर्टी के बारे में बताया गया है. अन्य सभी प्रॉपर्टी के बारे में जानकारी दी गई है और उन फ़ील्ड के साथ-साथ नीचे दिए गए सेक्शन में उन फ़ील्ड के साथ जिन्हें कैलिब्रेट करने के लिए इस्तेमाल किया गया है.

Touch.deviceType

परिभाषा: touch.deviceType = touchScreen | touchPad | pointer | default

टच डिवाइस का टाइप बताता है.

  • अगर वैल्यू touchScreen है, तो टच डिवाइस को टचस्क्रीन माना जाता है डिसप्ले के साथ.

  • अगर वैल्यू touchPad है, तो टच डिवाइस एक टच पैड है जो जुड़ा नहीं है डिसप्ले के साथ.

  • अगर वैल्यू pointer है, तो टच डिवाइस एक टच पैड है जो जुड़ा नहीं है और इसके मोशन का इस्तेमाल इन कामों के लिए किया जाता है इनडायरेक्ट मल्टी-टच पॉइंटर जेस्चर भी उपलब्ध है.

  • अगर वैल्यू default है, तो सिस्टम डिवाइस टाइप का पता अपने-आप लगा लेता है. ऐसा, डिवाइस टाइप की पहचान करने वाले एल्गोरिदम के हिसाब से होता है.

डिवाइस टाइप, टच डिवाइस के व्यवहार पर कैसे असर डालता है, इस बारे में ज़्यादा जानकारी के लिए क्लासिफ़िकेशन सेक्शन देखें.

Android 3 और उससे पहले के वर्शन में, सभी टच डिवाइस को टचस्क्रीन माना गया था.

Touch.orientationAware

परिभाषा: touch.orientationAware = 0 | 1

इससे पता चलता है कि टच डिवाइस को डिसप्ले के ओरिएंटेशन में होने वाले बदलावों पर प्रतिक्रिया करनी चाहिए या नहीं.

  • अगर वैल्यू 1 है, तो टच डिवाइस से रिपोर्ट की गई टच पोज़िशन घुमाई जाती हैं जब भी डिसप्ले की दिशा बदलती है.

  • अगर वैल्यू 0 है, तो टच डिवाइस से रिपोर्ट की गई टच पोज़िशन, डिसप्ले के ओरिएंटेशन में होने वाले बदलावों से सुरक्षित रहती हैं.

अगर डिवाइस टच स्क्रीन है, तो डिफ़ॉल्ट वैल्यू 1 होगी. अगर डिवाइस टच स्क्रीन नहीं है, तो डिफ़ॉल्ट वैल्यू 0 होगी.

सिस्टम, अंदर और बाहर की टचस्क्रीन और डिसप्ले के बीच अंतर करता है. ओरिएंटेशन के हिसाब से काम करने वाली अंदरूनी टच स्क्रीन, अंदरूनी डिसप्ले के ओरिएंटेशन के हिसाब से घूमती है. स्क्रीन की दिशा बदलने वाली बाहरी टचस्क्रीन को घुमाया गया के ओरिएंटेशन के आधार पर कस्टमाइज़ किया जा सकता है.

स्क्रीन ओरिएंटेशन की जानकारी का इस्तेमाल, डिवाइसों पर टचस्क्रीन को घुमाने के लिए किया जाता है जैसे कि Nexus One. उदाहरण के लिए, जब डिवाइस को उसके सामान्य ओरिएंटेशन से, घड़ी की सुई के घूमने की दिशा में 90 डिग्री घुमाया जाता है, तो टच की सटीक जगहों को फिर से मैप किया जाता है. ऐसा इसलिए किया जाता है, ताकि टच स्क्रीन के सटीक कोऑर्डिनेट सिस्टम के सबसे ऊपर बाएं कोने में किए गए टच को, डिसप्ले के घुमाए गए कोऑर्डिनेट सिस्टम के सबसे ऊपर बाएं कोने में किए गए टच के तौर पर रिपोर्ट किया जा सके. ऐसा इसलिए किया जाता है, ताकि स्पर्शों को उसी निर्देशांक सिस्टम के साथ रिपोर्ट किया जाए जो ऐप्लिकेशन, विज़ुअल एलिमेंट ड्रॉ करने के लिए इस्तेमाल करते हैं.

Honeycomb से पहले, सभी टच डिवाइसों को स्क्रीन की दिशा के बारे में जानकारी थी.

touch.gestureMode

परिभाषा: touch.gestureMode = pointer | spots | default

पॉइंटर जेस्चर के लिए प्रज़ेंटेशन मोड तय करती है. यह कॉन्फ़िगरेशन प्रॉपर्टी सिर्फ़ तब काम की होती है, जब टच डिवाइस पॉइंटर टाइप का हो.

  • अगर वैल्यू pointer है, तो टच पैड जेस्चर को कर्सर के ज़रिए दिखाया जाता है एक माउस पॉइंटर की तरह होता है.

  • अगर वैल्यू spots है, तो टच पैड जेस्चर को ऐंकर दिखेगा जो जेस्चर के केंद्र और गोल धब्बे के सेट को दिखाता है अंगुलियों की जगह को दिखाते हैं.

INPUT_PROP_SEMI_MT इनपुट प्रॉपर्टी सेट होने पर, डिफ़ॉल्ट वैल्यू pointer होती है. इसके अलावा, spots डिफ़ॉल्ट वैल्यू होती है.

X और Y फ़ील्ड

X और Y फ़ील्ड, संपर्क क्षेत्र के बीच की जानकारी देते हैं.

हिसाब लगाना

इसका हिसाब लगाना आसान है: टच ड्राइवर से मिली पोज़िशनल जानकारी को आउटपुट कोऑर्डिनेट सिस्टम से लीनियर तौर पर इंटरपोलेट किया गया.

xScale = output.width / raw.width
yScale = output.height / raw.height

If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
    output.x = (raw.y - raw.y.min) * yScale
    output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
    output.x = (raw.x.max - raw.x) * xScale
    output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
    output.x = (raw.y.max - raw.y) * yScale
    output.y = (raw.x - raw.x.min) * xScale
End If

टच मेजर, टच माइनर, टूल मेजर, टूल माइनर, साइज़ फ़ील्ड

touchMajor और touchMinor फ़ील्ड, आउटपुट यूनिट (पिक्सल) में संपर्क क्षेत्र के अनुमानित डाइमेंशन के बारे में बताते हैं.

toolMajor और toolMinor फ़ील्ड, अनुमानित डाइमेंशन के बारे में बताते हैं का आउटपुट यूनिट (पिक्सल) में ही टूल होता है.

size फ़ील्ड, टच डिवाइस के सबसे बड़े टच के हिसाब से टच के सामान्य साइज़ के बारे में बताता है. सबसे छोटा संभावित नॉर्मलाइज़्ड साइज़ 0.0 है (कोई संपर्क नहीं होता या मेज़र नहीं किया जा सकता) और सबसे बड़ा सामान्य नॉर्मलाइज़ किया हुआ साइज़ 1.0 है (सेंसर एरिया सैचुरेटेड है).

जब अनुमानित लंबाई और चौड़ाई, दोनों को मेज़र किया जा सकता है, तो touchMajor फ़ील्ड, संपर्क क्षेत्र के लंबे डाइमेंशन की जानकारी देता है और touchMinor फ़ील्ड, छोटे डाइमेंशन की जानकारी देता है. जब संपर्क के एरिया का सिर्फ़ अनुमानित व्यास मापा जा सकता हो, तो touchMajor और touchMinor फ़ील्ड बराबर होते हैं.

इसी तरह, toolMajor फ़ील्ड, टूल के क्रॉस-सेक्शनल एरिया के लंबे डाइमेंशन की जानकारी देता है और toolMinor फ़ील्ड, टूल के क्रॉस-सेक्शनल एरिया के छोटे डाइमेंशन की जानकारी देता है.

अगर टच साइज़ उपलब्ध नहीं है, लेकिन टूल साइज़ उपलब्ध है, तो टूल साइज़ को टच साइज़ के बराबर सेट किया जाता है. इसके उलट, अगर टूल साइज़ उपलब्ध नहीं है, लेकिन टच साइज़ उपलब्ध है, तो टूल साइज़ के बराबर टच साइज़ सेट किया जाता है.

टच डिवाइस, टच साइज़ और टूल साइज़ को अलग-अलग तरीकों से मेज़र या रिपोर्ट करते हैं. फ़िलहाल, लागू होने वाले तीन अलग-अलग तरह के मेज़रमेंट का इस्तेमाल किया जा सकता है: व्यास, क्षेत्र, और सतह इकाइयों में ज्यामितीय बाउंडिंग बॉक्स.

परिभाषा: touch.size.calibration = none | geometric | diameter | area | default

टच साइज़ और टूल साइज़ की रिपोर्ट करने के लिए, टच ड्राइवर किस तरह के मेज़रमेंट का इस्तेमाल करता है, इसकी जानकारी देता है.

  • अगर वैल्यू none है, तो साइज़ को शून्य पर सेट किया जाता है.

  • अगर वैल्यू geometric है, तो साइज़ की जानकारी देने के लिए यह माना जाता है कि यूनिट को पोज़ीशन में रखने के लिए, उसे एक जैसे ही स्केल किया जाता है.

  • अगर वैल्यू diameter है, तो माना जाता है कि साइज़, टच या टूल के डाइमीटर (चौड़ाई) के हिसाब से है.

  • अगर वैल्यू area है, तो साइज़ को स्पर्श या टूल का क्षेत्र.

  • अगर वैल्यू default है, तो सिस्टम geometric कैलिब्रेशन का इस्तेमाल करता है, अगर raw.touchMajor या raw.toolMajor ऐक्सिस उपलब्ध है. अगर ऐसा नहीं है, तो यह none कैलिब्रेशन.

टच.साइज़.स्केल

परिभाषा: touch.size.scale = <a नॉन-नेगेटिव फ़्लोटिंग पॉइंट नंबर>

कैलिब्रेशन में इस्तेमाल किया जाने वाला कॉन्स्टेंट स्केल फ़ैक्टर बताता है.

डिफ़ॉल्ट वैल्यू 1.0 है.

Touch.size.bias

परिभाषा: touch.size.bias = <a non-negative floating point number>

कैलिब्रेशन में इस्तेमाल की गई कॉन्स्टेंट बायस वैल्यू बताता है.

डिफ़ॉल्ट वैल्यू 0.0 है.

Touch.size.isSumed

परिभाषा: touch.size.isSummed = 0 | 1

इससे पता चलता है कि साइज़ को सभी ऐक्टिव संपर्कों के साइज़ के योग के तौर पर रिपोर्ट किया गया है या हर संपर्क के लिए अलग-अलग रिपोर्ट किया गया है.

  • अगर वैल्यू 1 है, तो इस्तेमाल से पहले, रिपोर्ट किए गए साइज़ को संपर्कों की संख्या से divide किया जाता है.

  • अगर वैल्यू 0 है, तो रिपोर्ट किए गए साइज़ का इस्तेमाल उसी तरह किया जाएगा.

डिफ़ॉल्ट वैल्यू 0 है.

कुछ टच डिवाइस, खास तौर पर "Semi-MT" डिवाइस कई संपर्कों के अलग-अलग डाइमेंशन, ताकि वे साइज़ के मेज़रमेंट को रिपोर्ट कर सकें जो उनके कुल क्षेत्रफल या चौड़ाई को दिखाता हो. इस प्रॉपर्टी को सिर्फ़ ऐसे डिवाइसों के लिए 1 पर सेट किया जाना चाहिए. अगर आपको नहीं पता कि जीटीआईएन सही है या नहीं, तो इसकी वैल्यू 0 पर सेट करें.

हिसाब लगाना

touchMajor, touchMinor, toolMajor, और इन तीन चरणों के बीच की गिनती का कैलकुलेशन toolMinor, और size फ़ील्ड तय किए गए कैलिब्रेशन पैरामीटर पर निर्भर होते हैं.

If raw.touchMajor and raw.toolMajor are available:
    touchMajor = raw.touchMajor
    touchMinor = raw.touchMinor
    toolMajor = raw.toolMajor
    toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
    toolMajor = touchMajor = raw.touchMajor
    toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
    touchMajor = toolMajor = raw.toolMajor
    touchMinor = toolMinor = raw.toolMinor
Else
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
End If

size = avg(touchMajor, touchMinor)

If touch.size.isSummed == 1:
    touchMajor = touchMajor / numberOfActiveContacts
    touchMinor = touchMinor / numberOfActiveContacts
    toolMajor = toolMajor / numberOfActiveContacts
    toolMinor = toolMinor / numberOfActiveContacts
    size = size / numberOfActiveContacts
End If

If touch.size.calibration == "none":
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
Else If touch.size.calibration == "geometric":
    outputScale = average(output.width / raw.width, output.height / raw.height)
    touchMajor = touchMajor * outputScale
    touchMinor = touchMinor * outputScale
    toolMajor = toolMajor * outputScale
    toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
    touchMajor = sqrt(touchMajor)
    touchMinor = touchMajor
    toolMajor = sqrt(toolMajor)
    toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
    touchMinor = touchMajor
    toolMinor = toolMajor
End If

If touchMajor != 0:
    output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
    output.touchMajor = 0
End If

If touchMinor != 0:
    output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
    output.touchMinor = 0
End If

If toolMajor != 0:
    output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
    output.toolMajor = 0
End If

If toolMinor != 0:
    output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
    output.toolMinor = 0
End If

output.size = size

दबाव फ़ील्ड

pressure फ़ील्ड, 0.0 (बिना स्पर्श) और 1.0 (सामान्य दबाव) के बीच के सामान्य मान के रूप में टच डिवाइस.

शून्य दबाव का मतलब है कि टूल हॉवर कर रहा है.

touch.pressure.calibration

परिभाषा: touch.pressure.calibration = none | physical | amplitude | default

इससे पता चलता है कि टच ड्राइवर, दबाव की जानकारी देने के लिए किस तरह के मेज़रमेंट का इस्तेमाल करता है.

  • अगर वैल्यू none है, तो दबाव की जानकारी नहीं होती है. इसलिए, यह 1.0 पर सेट हो जाता है, जब होवर करते समय 0.0 टच और 0.0.

  • अगर वैल्यू physical है, तो माना जाता है कि प्रेशर ऐक्सिस, टच पैड पर डाले गए प्रेशर की असल तीव्रता को मापता है.

  • अगर वैल्यू amplitude है, तो सिग्नल को मापने के लिए, प्रेशर ऐक्सिस का इस्तेमाल किया जाता है एम्प्लिट्यूड, संपर्क के साइज़ और उस पर लगाए गए दबाव से जुड़ा होता है.

  • अगर वैल्यू default है, तो सिस्टम physical कैलिब्रेशन का इस्तेमाल करता है, अगर प्रेशर ऐक्सिस उपलब्ध है. अगर ऐसा नहीं है, तो none का इस्तेमाल किया जाता है.

touch.pressure.scale

परिभाषा: touch.pressure.scale = <a non-negative floating point number>

कैलिब्रेशन में इस्तेमाल किया जाने वाला कॉन्स्टेंट स्केल फ़ैक्टर बताता है.

डिफ़ॉल्ट वैल्यू 1.0 / raw.pressure.max है.

हिसाब लगाना

pressure फ़ील्ड की गिनती, तय किए गए कैलिब्रेशन पैरामीटर पर निर्भर करती है.

If touch.pressure.calibration == "physical" or "amplitude":
    output.pressure = raw.pressure * touch.pressure.scale
Else
    If hovering:
        output.pressure = 0
    Else
        output.pressure = 1
    End If
End If

ओरिएंटेशन और झुकाव वाले फ़ील्ड

orientation फ़ील्ड, टच और टूल के ओरिएंटेशन को ऐंगल के तौर पर बताता है. 0 का ओरिएंटेशन यह दिखाता है कि मुख्य ऐक्सिस, वर्टिकल ओरिएंटेशन में है, -PI/2 का ओरिएंटेशन यह दिखाता है कि मुख्य ऐक्सिस, बाईं ओर ओरिएंट है, PI/2 का ओरिएंटेशन यह दिखाता है कि मुख्य ऐक्सिस, दाईं ओर ओरिएंट है. जब स्टाइलस टूल मौजूद होता है, तो ओरिएंटेशन रेंज को -PI या PI से लेकर पूरे सर्कल रेंज में दिखाया जा सकता है.

tilt फ़ील्ड, टूल के झुकाव को ऐंगल के तौर पर मेज़र करता है. 0 के टिल्ट होने का मतलब है कि टूल, सतह के लंबवत है. PI/2 को झुकाने का मतलब है कि टूल सतह पर सपाट है.

touch.orientation.calibration

परिभाषा: touch.orientation.calibration = none | interpolated | vector | default

इससे यह पता चलता है कि ओरिएंटेशन को रिपोर्ट करने के लिए, टच ड्राइवर किस तरह का मेज़रमेंट इस्तेमाल करता है.

  • अगर वैल्यू none है, तो ओरिएंटेशन की जानकारी नहीं है, इसलिए यह 0 पर सेट है.
  • अगर वैल्यू interpolated है, तो ओरिएंटेशन इस तरह लीनियर तौर पर इंटरपोलेट किया जाता है कि -PI/2 के लिए raw.orientation.min मैप का रॉ वैल्यू और रॉ वैल्यू PI/2 पर raw.orientation.max मैप करता है. (raw.orientation.min + raw.orientation.max) / 2 की सेंटर वैल्यू, 0 पर मैप होती है.
  • अगर वैल्यू vector है, तो ओरिएंटेशन को पैक किए गए वेक्टर के तौर पर समझा जाता है. इसमें दो साइन वाले 4-बिट फ़ील्ड होते हैं. इस तरीके का इस्तेमाल, Atmel ऑब्जेक्ट आधारित प्रोटोकॉल के हिस्सों में किया जाता है. डिकोड करने पर, वेक्टर से ओरिएंटेशन ऐंगल और कॉन्फ़िडेंस मैग्नीट्यूड मिलता है. कॉन्फ़िडेंस मैग्नीट्यूड का इस्तेमाल, साइज़ की जानकारी को स्केल करने के लिए किया जाता है. ऐसा तब तक किया जाता है, जब तक कि यह ज्यामितीय न हो.
  • अगर वैल्यू default है, तो सिस्टम interpolated कैलिब्रेशन का इस्तेमाल करता है अगर ओरिएंटेशन ऐक्सिस उपलब्ध है, तो none का इस्तेमाल किया जाता है.

हिसाब लगाना

orientation और tilt फ़ील्ड की वैल्यू, इन बातों के आधार पर कैलकुलेट की जाती है: कुछ कैलिब्रेशन पैरामीटर और उपलब्ध इनपुट की जानकारी देता है.

If touch.tiltX and touch.tiltY are available:
    tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
    tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
    tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
    tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
    output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
    output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
    center = average(raw.orientation.min, raw.orientation.max)
    output.orientation = PI / (raw.orientation.max - raw.orientation.min)
    output.tilt = 0
Else If touch.orientation.calibration == "vector":
    c1 = (raw.orientation & 0xF0) >> 4
    c2 = raw.orientation & 0x0F

    If c1 != 0 or c2 != 0:
        If c1 >= 8 Then c1 = c1 - 16
        If c2 >= 8 Then c2 = c2 - 16
        angle = atan2(c1, c2) / 2
        confidence = sqrt(c1*c1 + c2*c2)

        output.orientation = angle

        If touch.size.calibration == "diameter" or "area":
            scale = 1.0 + confidence / 16
            output.touchMajor *= scale
            output.touchMinor /= scale
            output.toolMajor *= scale
            output.toolMinor /= scale
        End If
    Else
        output.orientation = 0
    End If
    output.tilt = 0
Else
    output.orientation = 0
    output.tilt = 0
End If

If orientation aware:
    If screen rotation is 90 degrees:
        output.orientation = output.orientation - PI / 2
    Else If screen rotation is 270 degrees:
        output.orientation = output.orientation + PI / 2
    End If
End If

दूरी वाला फ़ील्ड

distance फ़ील्ड, टूल और टच डिवाइस के बीच की दूरी के बारे में बताता है की जगह है. 0.0 की वैल्यू से पता चलता है कि डिवाइस, सतह से सीधे संपर्क में है. वहीं, ज़्यादा वैल्यू से पता चलता है कि डिवाइस, सतह से दूर हो रहा है.

टच.डिस्टेंस.कैलिब्रेशन

परिभाषा: touch.distance.calibration = none | scaled | default

इससे पता चलता है कि टच ड्राइवर, दूरी की जानकारी देने के लिए किस तरह के मेज़रमेंट का इस्तेमाल करता है.

  • अगर वैल्यू none है, तो इसका मतलब है कि दूरी की जानकारी नहीं है. इसलिए, इसे 0 पर सेट किया जाता है.

  • अगर वैल्यू scaled है, तो रिपोर्ट की गई दूरी को स्केल के एक तय फ़ैक्टर से गुणा किया जाता है.

  • अगर वैल्यू default है, तो सिस्टम scaled कैलिब्रेशन का इस्तेमाल करता है. ऐसा तब होता है, जब दूरी का ऐक्सिस उपलब्ध हो. अगर ऐक्सिस उपलब्ध नहीं है, तो सिस्टम none का इस्तेमाल करता है.

Touch.distance.Scale

परिभाषा: touch.distance.scale = <a non-negative floating point number>

कैलिब्रेशन में इस्तेमाल किया जाने वाला कॉन्स्टेंट स्केल फ़ैक्टर बताता है.

डिफ़ॉल्ट वैल्यू 1.0 है.

हिसाब लगाना

distance फ़ील्ड की कैलकुलेशन, बताए गए कैलिब्रेशन पर निर्भर करती है पैरामीटर का इस्तेमाल करें.

If touch.distance.calibration == "scaled":
    output.distance = raw.distance * touch.distance.scale
Else
    output.distance = 0
End If

उदाहरण

# Input device configuration file for a touch screen that supports pressure,
# size and orientation. The pressure and size scale factors were obtained
# by measuring the characteristics of the device itself and deriving
# useful approximations based on the resolution of the touch sensor and the
# display.
#
# Note that these parameters are specific to a particular device model.
# Different parameters need to be used for other devices.

# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1

# Size
# Based on empirical measurements, we estimate the size of the contact
# using size = sqrt(area) * 28 + 0.
touch.size.calibration = area
touch.size.scale = 28
touch.size.bias = 0
touch.size.isSummed = 0

# Pressure
# Driver reports signal strength as pressure.
#
# A normal index finger touch typically registers about 80 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.0125

# Orientation
touch.orientation.calibration = vector

कम्पैटिबिलिटी नोट

Android Ice Cream Sandwich 4.0 में, टच डिवाइसों के लिए कॉन्फ़िगरेशन प्रॉपर्टी काफ़ी बदल गई हैं. नई कॉन्फ़िगरेशन प्रॉपर्टी का इस्तेमाल करने के लिए, टच डिवाइसों के लिए सभी इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलों को अपडेट करना ज़रूरी है.

पुराने टच डिवाइस ड्राइवर के लिए भी यह ज़रूरी है अपडेट किया गया.

वर्चुअल की-मैप फ़ाइलें

वर्चुअल बटन लागू करने के लिए, टच डिवाइसों का इस्तेमाल किया जा सकता है.

टच कंट्रोलर की सुविधाओं के हिसाब से, ऐसा करने के कई तरीके हैं. कुछ टच कंट्रोलर को सीधे तौर पर लागू करने के लिए कॉन्फ़िगर किया जा सकता है सॉफ़्ट कुंजियां, फ़र्मवेयर रजिस्टर सेट करें. कभी-कभी, सॉफ़्टवेयर में टच कोऑर्डिनेट से की कोड पर मैपिंग करना ज़रूरी होता है.

जब सॉफ़्टवेयर में वर्चुअल बटन लागू किए जाते हैं, तो कर्नेल को वर्चुअल पासकोड मैप एक्सपोर्ट करना होता है बोर्ड प्रॉपर्टी के रूप में virtualkeys.<devicename> नाम की फ़ाइल. उदाहरण के लिए, अगर टचस्क्रीन डिवाइस के ड्राइवर अपना नाम "टचीफ़ीली" बताते हैं तब वर्चुअल कुंजी मैप फ़ाइल में पाथ होना चाहिए /sys/board_properties/virtualkeys.touchyfeely.

वर्चुअल बटन मैप फ़ाइल, टच स्क्रीन पर वर्चुअल बटन के कोऑर्डिनेट और Linux बटन कोड के बारे में बताती है.

वर्चुअल की मैप फ़ाइल के अलावा, उससे जुड़ी की लेआउट फ़ाइल और की कैरेक्टर मैप फ़ाइल भी होनी चाहिए. इससे, Linux की बटन कोड को Android की बटन कोड से मैप किया जा सकता है. साथ ही, कीबोर्ड डिवाइस का टाइप (आम तौर पर SPECIAL_FUNCTION) भी बताया जा सकता है.

वाक्य-विन्यास

वर्चुअल कुंजी की मैप फ़ाइल, एक सादा टेक्स्ट फ़ाइल होती है. इसमें वर्चुअल कुंजी का क्रम होता है लेआउट ब्यौरे को नई लाइनों या कोलन से अलग किया गया हो.

टिप्पणी की लाइनें '#' से शुरू होती हैं और लाइन के आखिर तक जारी रखें.

हर वर्चुअल कुंजी के बारे में, कोलन से अलग किए गए छह कॉम्पोनेंट दिए गए हैं:

  • 0x01: वर्शन कोड. इसकी वैल्यू हमेशा 0x01 होनी चाहिए.
  • <Linux कुंजी कोड>: वर्चुअल कुंजी का Linux कुंजी कोड.
  • <centerX>: वर्चुअल बटन के बीच के हिस्से का X पिक्सल कोऑर्डिनेट.
  • <centerY>: वर्चुअल कुंजी के केंद्र का Y पिक्सल निर्देशांक.
  • <width>: पिक्सल में वर्चुअल कुंजी की चौड़ाई.
  • <height>: वर्चुअल बटन की ऊंचाई, पिक्सल में.

सभी निर्देशांक और आकार, डिसप्ले निर्देशांक सिस्टम के हिसाब से बताए गए हैं.

यहां एक लाइन में लिखी गई वर्चुअल पासकोड मैप फ़ाइल दी गई है.

# All on one line
0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55

एक ही वर्चुअल की मैप फ़ाइल को कई लाइनों में भी लिखा जा सकता है.

# One key per line
0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

ऊपर दिए गए उदाहरण में, टच स्क्रीन का रिज़ॉल्यूशन 480x800 है. इसी तरह, सभी वर्चुअल बटन में <centerY> होता है 835 का निर्देशांक है, जो इससे थोड़ा नीचे है टच स्क्रीन का दृश्यमान क्षेत्र.

पहली कुंजी में 158 (KEY_BACK) का Linux स्कैन कोड, 55 का centerX, 835 का centerY, 90 की चौड़ाई, और 55 की ऊंचाई है.

उदाहरण

वर्चुअल की मैप फ़ाइल: /sys/board_properties/virtualkeys.touchyfeely.

0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

मुख्य लेआउट फ़ाइल: /system/usr/keylayout/touchyfeely.kl.

key 158 BACK
key 139 MENU
key 172 HOME
key 217 SEARCH

मुख्य वर्ण मैप फ़ाइल: /system/usr/keychars/touchyfeely.kcm.

type SPECIAL_FUNCTION

इनडायरेक्ट मल्टी-टच पॉइंटर जेस्चर

पॉइंटर मोड में, सिस्टम इन जेस्चर की पहचान करता है:

  • एक उंगली से टैप करने की सुविधा: क्लिक करें.
  • एक उंगली से चलाना: पॉइंटर को एक जगह से दूसरी जगह ले जाना.
  • एक उंगली से मोशन और बटन दबाने पर: पॉइंटर को खींचें और छोड़ें.
  • एक ही दिशा में दो उंगलियों से दोनों अंगुलियों को चलाना: पॉइंटर के नीचे के क्षेत्र को खींचें और छोड़ें दिशा-निर्देशों के उल्लंघन की वजह से. पॉइंटर अपने-आप नहीं चलता.
  • दो उंगलियों से, दोनों उंगलियों को एक-दूसरे की ओर या अलग करते हुए अलग-अलग दिशा-निर्देश: पॉइंटर के आस-पास के हिस्से को पैन/स्केल करें/घुमाएं. पॉइंटर अपने-आप नहीं चलता.
  • एक से ज़्यादा उंगलियों से किए जाने वाले हाथ के जेस्चर: फ़्रीफ़ॉर्म जेस्चर.

हथेली के बीच की त्वचा का अस्वीकार होना

Android 13 में, डिवाइस में पहले से मौजूद फ़्रेमवर्क चालू होने पर, सिस्टम अपने-आप हथेली से मिले इनपुट को अस्वीकार कर सकता है. हालांकि, अब भी अपने हिसाब से बनाए गए समाधानों का इस्तेमाल किया जा सकता है. हालांकि, हो सकता है कि हथेली का पता चलने पर TOOL_TYPE_PALM फ़्लैग दिखाने के लिए, उनमें बदलाव करना पड़े. बिल्ट-इन फ़्रेमवर्क, कस्टम समाधानों के साथ भी काम करता है.

असल मॉडल, मौजूदा पॉइंटर पर, जेस्चर के डेटा के शुरुआती 90 मि॰से॰ और इसके बाद, यह ध्यान रखता है कि डिसप्ले के किनारे से कितनी दूर टच किए गए हैं. इसके बाद, यह हर पॉइंट के हिसाब से यह तय करता है कि कौनसे पॉइंटर हथेली हैं. यह इन बातों का भी ध्यान रखता है हर संपर्क के साइज़ से जुड़ी जानकारी होगी, जैसा कि touchMajor ने रिपोर्ट किया है और touchMinor. इसके बाद, Android फ़्रेमवर्क, टच स्ट्रीम से उन पॉइंटर को हटा देता है जिन्हें हथेली के तौर पर मार्क किया गया है.

अगर ऐप्लिकेशन पर पहले ही पॉइंटर भेज दिया गया है, तो सिस्टम में से कोई एक:

  • (अगर कोई दूसरा ऐक्टिव पॉइंटर है) ACTION_POINTER_UP और FLAG_CANCELED सेट करके, पॉइंटर को रद्द करता है.
  • (अगर सिर्फ़ यही पॉइंटर है) ACTION_CANCEL के साथ पॉइंटर को रद्द करता है.

सार्वजनिक एपीआई, MotionEvent.FLAG_CANCELED से पता चलता है कि मौजूदा इवेंट से उपयोगकर्ता की कार्रवाई ट्रिगर नहीं होनी चाहिए. यह फ़्लैग, ACTION_CANCEL और ACTION_POINTER_UP, दोनों के लिए सेट है.

अगर ऐप्लिकेशन पर पाम पॉइंटर नहीं भेजा जा सका, तो सिस्टम बस पॉइंटर को ड्रॉप कर देता है.

हथेली के स्पर्श से होने वाली गड़बड़ी को रोकने की सुविधा चालू करना

  1. अपने टच ड्राइवर में, input_abs_set_res मैक्रो निम्न फ़ील्ड के लिए रिज़ॉल्यूशन सेट करने के लिए (इकाई पिक्सल प्रति मि॰मी॰):
    • ABS_MT_POSITION_X
    • ABS_MT_POSITION_Y
    • ABS_MT_TOUCH_MAJOR
    • ABS_MT_TOUCH_MINOR

    ABS_MT_TOUCH_MINOR के लिए सहायता देना ज़रूरी नहीं है. हालांकि, अगर आपका डिवाइस का समर्थन करता है, तो सुनिश्चित करें कि रिज़ॉल्यूशन सही ढंग से सेट है.

  2. यह पुष्टि करने के लिए कि फ़ील्ड सही तरीके से सेट हैं, इसे चलाएं:
        $ adb shell getevent -li
    
  3. रनटाइम के दौरान सुविधा को चालू करने के लिए, इसे चलाएं:
        $ adb shell device_config put input_native_boot palm_rejection_enabled 1
    
  4. system_server प्रोसेस को फिर से शुरू करें.
         $ adb shell stop && adb shell start
        
  5. पुष्टि करें कि adb shell dumpsys input से पता चलता है कि UnwantedInteractionBlocker में पाम रिजेक्टर मौजूद हैं. अगर ऐसा नहीं होता है, तो इनपुट से जुड़े लॉग देखें. इससे आपको यह पता चलेगा कि किस चीज़ का गलत तरीके से कॉन्फ़िगरेशन किया गया है.

    रेफ़रंस के लिए यह उदाहरण देखें:

    UnwantedInteractionBlocker:
      mEnablePalmRejection: true
      isPalmRejectionEnabled (flag value): true
      mPalmRejectors:
        deviceId = 3:
          mDeviceInfo:
            max_x = 
            max_y = 
            x_res = 11.00
            y_res = 11.00
            major_radius_res = 1.00
            minor_radius_res = 1.00
            minor_radius_supported = true
            touch_major_res = 1
            touch_minor_res = 1
          mSlotState:
            mSlotsByPointerId:
    
            mPointerIdsBySlot:
    
          mSuppressedPointerIds: {}
    
  6. इस सुविधा को हमेशा के लिए चालू करने के लिए, इससे जुड़े sysprop कमांड को init**rc फ़ाइल:

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

इसके बारे में और पढ़ें