टच डिवाइस

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 की मदद से इनपुट प्रॉपर्टी का इस्तेमाल करने के बाद, डिवाइस का टाइप टच स्क्रीन पर सेट करना. इस स्थिति में माना जाता है कि डायरेक्ट इनपुट टच डिवाइस किसी ऐसे डिसप्ले से जुड़े हों जो कनेक्ट किया गया हो.
  • अगर इनपुट डिवाइस, INPUT_PROP_POINTER की मौजूदगी की रिपोर्ट करता है प्रॉपर्टी (EVIOCGPROP ioctl की मदद से) इनपुट करें. इसके बाद, डिवाइस टाइप पॉइंटर पर सेट किया गया हो.
  • अगर इनपुट डिवाइस, 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 एपीआई की तरह ही अन्य डिवाइसों पर, टूल को अक्सर इस्तेमाल किया जाता है एक पॉइंटर के तौर पर.

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

  • 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: (वैकल्पिक) यह रिपोर्ट की मदद से, टूल की सतह से टूल के झुकाव की रिपोर्ट करता है X ऐक्सिस पर टच डिवाइस.
    • ABS_TILT_Y: (वैकल्पिक) यह रिपोर्ट की मदद से, टूल की सतह से टूल के झुकाव की रिपोर्ट करता है 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 = 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 नॉन-नेगेटिव फ़्लोटिंग पॉइंट नंबर>

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

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

Touch.size.isSumed

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

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

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

  • अगर वैल्यू 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 = none | physical | amplitude | default

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

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

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

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

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

टच.प्रेशर.स्केल

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

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

डिफ़ॉल्ट वैल्यू 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 = none | interpolated | vector | default

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

  • अगर वैल्यू none है, तो ओरिएंटेशन की जानकारी नहीं है, इसलिए यह 0 पर सेट है.
  • अगर वैल्यू interpolated है, तो ओरिएंटेशन इस तरह लीनियर तौर पर इंटरपोलेट किया जाता है कि -PI/2 के लिए raw.orientation.min मैप का रॉ वैल्यू और रॉ वैल्यू PI/2 पर raw.orientation.max मैप करता है. मान का केंद्र मान 0 पर (raw.orientation.min + raw.orientation.max) / 2 मैप करता है.
  • अगर वैल्यू vector है, तो ओरिएंटेशन को ऐसे वेक्टर के तौर पर समझा जाता है जिसमें पैक किया गया वेक्टर होता है साइन किए गए दो 4-बिट फ़ील्ड में से एक को चुनें. इस प्रज़ेंटेशन का इस्तेमाल, एटमल ऑब्जेक्ट बेस्ड प्रोटोकॉल के लिए किया जाता है पार्ट. डिकोड किए जाने पर, वेक्टर से ओरिएंटेशन एंगल और कॉन्फ़िडेंस मिलता है तीव्रता. कॉन्फ़िडेंस मैग्निट्यूड का इस्तेमाल साइज़ की जानकारी को मापने के लिए किया जाता है, जब तक कि वह ज्यामितीय न हो.
  • अगर वैल्यू 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 है, तो रिपोर्ट की गई दूरी को a से गुणा किया जाता है कॉन्स्टेंट स्केल फ़ैक्टर.

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

Touch.distance.Scale

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

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

डिफ़ॉल्ट वैल्यू 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 आइसक्रीम सैंडविच 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 का निर्देशांक है, जो इससे थोड़ा नीचे है टच स्क्रीन का दृश्यमान क्षेत्र.

पहली कुंजी का Linux स्कैन कोड 158 (KEY_BACK) है, जो कि centerX की है 55, 835 के बीच में, 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
    

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