الأجهزة التي تعمل باللمس

يتوافق Android مع مجموعة متنوعة من الشاشات التي تعمل باللمس ولوحات اللمس، بما في ذلك: الأجهزة اللوحية المزوّدة بقلم الشاشة الرقمية.

الشاشات التي تعمل باللمس هي أجهزة تعمل باللمس ومرتبطة بشاشة معيَّنة يكون لدى المستخدم انطباع بالتلاعب المباشر بالعناصر على الشاشة.

لوحات اللمس هي أجهزة تعمل باللمس غير مرتبطة بشاشة، مثل جهاز التحويل الرقمي. تُستخدم لوحات اللمس عادةً للتأشير أو الموضع المطلق غير المباشر أو التحكم المستند إلى الإيماءات لواجهة المستخدم.

يمكن أن تحتوي الأجهزة التي تعمل باللمس على أزرار تشبه وظائفها أزرار الماوس.

يمكن أحيانًا التلاعب بالأجهزة التي تعمل باللمس باستخدام مجموعة متنوّعة من الأدوات المختلفة. مثل الأصابع أو قلم الشاشة، اعتمادًا على تقنية أداة استشعار اللمس الأساسية.

وفي بعض الأحيان، يتم استخدام الأجهزة التي تعمل باللمس لتنفيذ المفاتيح الافتراضية. على سبيل المثال، في في بعض أجهزة Android، تمتد منطقة أداة استشعار الشاشة التي تعمل باللمس إلى ما وراء حافة الشاشة وتعمل بشكل مزدوج كجزء من لوحة مفاتيح حساسة للمس.

نظرًا للتنوع الكبير لأجهزة اللمس، يعتمد نظام Android على عدد كبير من خصائص الضبط لوصف الخصائص والسلوك المطلوب كل جهاز.

تصنيف الجهاز الذي يعمل باللمس

يتم تصنيف جهاز الإدخال كجهاز متعدد اللمس إذا كان تثبيت الشروط التالية:

  • يشير جهاز الإدخال إلى توفُّر جهاز ABS_MT_POSITION_X ABS_MT_POSITION_Y محور مطلق.
  • لا يتضمّن جهاز الإدخال أي أزرار للوحة الألعاب. هذا الشرط تحل الغموض مع بعض وحدات الألعاب التي تشير إلى محاور باستخدام الرموز تتداخل مع محاور الترجمة الآلية.

يتم تصنيف جهاز الإدخال كجهاز يعمل بلمسة واحدة إذا كان تعليق الشروط التالية:

  • جهاز الإدخال غير مصنَّف على أنّه جهاز يتيح اللمس المتعدّد. جهاز إدخال الجهاز الذي يعمل بلمسة واحدة أو جهاز يعمل باللمس المتعدّد، ولا كلاهما مطلقًا.
  • يشير جهاز الإدخال إلى توفُّر قيمتَي ABS_X وABS_Y. ووجود رمز المفتاح BTN_TOUCH.

وعند تصنيف أحد أجهزة الإدخال كجهاز يعمل باللمس، فإن وجود يتم تحديد من المفاتيح الافتراضية من خلال محاولة تحميل ملف خريطة المفتاح الافتراضي للجهاز. في حال توفّر خريطة مفاتيح افتراضية، يجب اختيار تحميل ملف على الجهاز أيضًا. يمكنك الرجوع إلى [ملفات خريطة المفاتيح الافتراضية](#virtual-key-map-files) للحصول على معلومات حول موقع هذه الملفات وتنسيقها

بعد ذلك، يُحمِّل النظام ملف إعداد جهاز الإدخال للجهاز الذي يعمل باللمس.

يجب أن تحتوي جميع الأجهزة التي تعمل باللمس على ملفات إعداد جهاز الإدخال. في حال عدم توفُّر ملف إعداد جهاز إدخال، سيجري النظام اختيار ضبط تلقائي مناسب للأغراض العامة الأجهزة الملحقة التي تعمل باللمس، مثل الشاشات الخارجية التي تعمل باللمس USB أو التي تتضمن بلوتوث HID أو الألواح التي تعمل باللمس. هذه الإعدادات الافتراضية ليست مصممة للشاشات التي تعمل باللمس إلى سلوك غير صحيح.

بعد تحميل إعداد جهاز الإدخال، يصنِّف النظام جهاز الإدخال باعتباره شاشة تعمل باللمس أو لوحة لمس أو جهاز مؤشر.

  • يُستخدم الجهاز الذي يعمل بشاشة تعمل باللمس للتعامل بشكل مباشر مع العناصر على الشاشة. يلمس المستخدم الشاشة مباشرة، لذلك لا تتطلب أي عناصر وظيفية إضافية للإشارة إلى الأشياء التي التلاعب.
  • يتم استخدام جهاز لوحة اللمس لتوفير معلومات عن الموضع المطلق. إلى تطبيق عن اللمسات على منطقة أداة استشعار معينة. يمكن أن تكون مفيدة للأجهزة اللوحية التي يتم تحويلها إلى أجهزة رقمية.
  • يُستخدم جهاز المؤشر في معالجة الأجسام على الشاشة باستخدام مؤشر. يتم تفسير الأصابع على أنّها مؤشر تعمل باللمس المتعدّد الإيماءات. يتم تفسير الأدوات الأخرى، مثل أقلام الشاشة، باستخدام المواقف المطلقة. عرض مؤشر اللمس المتعدد غير المباشر الإيماءات لمزيد من المعلومات.

تُستخدَم القواعد التالية لتصنيف جهاز الإدخال كشاشة تعمل باللمس: أو لوحة لمس أو جهاز مؤشر.

  • إذا تم ضبط السمة touch.deviceType، يكون نوع الجهاز هو كما هو موضح.
  • إذا أبلغ جهاز الإدخال عن توفُّر INPUT_PROP_DIRECT خاصية الإدخال (من خلال ioctl EVIOCGPROP)، فإن نوع الجهاز الضبط على شاشة تعمل باللمس يفترض هذا الشرط أن لمس الإدخال المباشر الأجهزة المتصلة بشاشة أخرى متصلة كذلك.
  • إذا أبلغ جهاز الإدخال عن توفُّر INPUT_PROP_POINTER خاصية الإدخال (من خلال ioctl EVIOCGPROP)، ثم نوع الجهاز اضبط على مؤشر
  • إذا أبلغ جهاز الإدخال عن توفُّر 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: (اختياري) يبلِّغ عن إمالة الأداة من سطح الجهاز الذي يعمل باللمس على طول المحور س.
    • ABS_TILT_Y: (اختياري) يبلِّغ عن إمالة الأداة من سطح جهاز اللمس على طول المحور ص.
    • BTN_TOUCH: يشير (REQUIRED) إلى ما إذا كانت الأداة تلمس الخاص بك.
    • "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: يشير (REQUIRED) إلى ما إذا كانت الأداة تلمس الخاص بك.
    • "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"، تكون الأداة نشطة كلما تظهر في أحدث تقرير مزامنة. عندما تتوقف الأداة عن الظهور في لم تعد موجودة.
    • عند استخدام بروتوكول اللمس المتعدد "ب"، تكون الأداة نشطة طالما يحتوي على خانة نشطة. وعند محو الخانة، تتوقف الأداة عن التواجد.
  • يتم تحديد أداة يتم تمريرها استنادًا إلى الشروط التالية:
    • إذا كانت الأداة 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 دعم مجموعة أكبر من الأجهزة الملحقة التي تعمل باللمس، مثل أجهزة HID الخارجية المتعددة اللمس شاشات تعمل باللمس، باستخدام برامج تشغيل غير معدلة.

تشغيل الجهاز باللمس

في ما يلي ملخّص موجز عن عملية تشغيل الأجهزة التي تعمل باللمس في Android.

  1. يقرأ EventHub الأحداث الأولية من برنامج تشغيل evdev.
  2. يستخدم InputReader الأحداث الأولية ويعدّل الحالة الداخلية حول مكان كل أداة وخصائصها الأخرى. كما أنه يتتبع حالات الأزرار.
  3. في حال الضغط على زر رجوع أو إعادة التوجيه أو رفعه، يُرسِل "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
دقة المحور الأولي مثلاً: يشير Fzzzz = 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، سيتم عرض إيماءات لوحة اللمس من خلال علامة ارتساء. التي تمثل النقطة المركزية للإيماءة ومجموعة من النقاط الدائرية التي تمثل موضع الأصابع الفردية.

القيمة التلقائية هي pointer عندما تكون خاصية الإدخال INPUT_PROP_SEMI_MT. أو 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، أداةMinor، حقول الحجم

يصف الحقلان 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

التعريف: touch.size.scale = <رقم النقطة العائمة غير السالب>

تحدّد هذه السمة عامل مقياس ثابت يُستخدَم في المعايرة.

القيمة التلقائية هي 1.0.

touch.size.bias

التعريف: touch.size.bias = <رقم النقطة العائمة غير السالب>

تحدّد قيمة الانحياز الثابت المستخدمة في المعايرة.

القيمة التلقائية هي 0.0.

touch.size.isSummed

التعريف: touch.size.isSummed = 0 | 1

لتحديد ما إذا كان الحجم سيتم تسجيله كإجمالي الأحجام من جهات الاتصال النشطة أو يتم الإبلاغ عنه بشكل فردي لكل جهة اتصال.

  • إذا كانت القيمة 1، تتم قسمة الحجم الذي تم الإبلاغ عنه على الرقم. من جهات الاتصال قبل استخدامها.

  • إذا كانت القيمة هي 0، يتم استخدام المقاس الذي تم الإبلاغ عنه كما هو.

القيمة التلقائية هي 0.

بعض الأجهزة التي تعمل باللمس، خاصةً "شبه 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.معايرة

التعريف: touch.pressure.calibration = none | physical | amplitude | default

تحدِّد هذه السياسة نوع القياس الذي يستخدمه المحرّك الذي يعمل باللمس للإبلاغ عن الضغط.

  • إذا كانت القيمة none، يكون الضغط غير معروف، ويتم ضبطه على 1.0 عند اللمس و0.0 عند التمرير.

  • إذا كانت القيمة physical، يتم افتراض أن محور الضغط يقيس القيمة الفعلية شدة الضغط البدني المطبقة على لوحة اللمس.

  • إذا كانت القيمة amplitude، يتم افتراض أن محور الضغط يقيس الإشارة سعة المطاط، وهي ترتبط بحجم نقطة الاتّصال والضغط المطبَّق.

  • إذا كانت القيمة هي default، يستخدم النظام معايرة "physical" إذا كانت محور الضغط متاح، وإلا سيستخدم none.

touch.pressure.scale

التعريف: touch.pressure.scale = <رقم النقطة العائمة غير السالب>

تحدّد هذه السمة عامل مقياس ثابت يُستخدَم في المعايرة.

القيمة التلقائية هي 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.المعايرة

التعريف: touch.orientation.calibration = none | interpolated | vector | default

تحدِّد هذه السياسة نوع القياس الذي يستخدمه برنامج التشغيل الذي يعمل باللمس للإبلاغ عن الاتجاه.

  • إذا كانت القيمة هي none، يكون الاتجاه غير معروف، وبالتالي يتم ضبطه على 0.
  • وإذا كانت القيمة interpolated، يتم استقراء الاتجاه خطيًا بحيث ترتبط القيمة الأولية لـ raw.orientation.min بـ -PI/2 والقيمة الأولية ربط "raw.orientation.max" بـ "PI/2". قيمة المركز ربط (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.المعايرة

التعريف: touch.distance.calibration = none | scaled | default

تحدِّد هذه السياسة نوع القياس الذي يستخدمه برنامج التشغيل الذي يعمل باللمس للإبلاغ عن المسافة.

  • إذا كانت القيمة none، تكون المسافة غير معروفة، وبالتالي يتم ضبطها على 0.

  • إذا كانت القيمة هي scaled، يتم ضرب المسافة المبلّغ عنها في عامل القياس الثابت.

  • إذا كانت القيمة هي default، يستخدم النظام معايرة "scaled" إذا كانت محور المسافة متاح، وإلا سيستخدم none.

touch.distance.scale

التعريف: touch.distance.scale = <رقم النقطة العائمة غير السالب>

تحدّد هذه السمة عامل مقياس ثابت يُستخدَم في المعايرة.

القيمة التلقائية هي 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> كسمة لوحة. على سبيل المثال: إذا كانت برامج تشغيل الأجهزة ذات الشاشات التي تعمل باللمس أشارت إلى أنّ اسمها هو "Touchyfeely" ثم يجب أن يحتوي ملف خريطة المفتاح الافتراضي على المسار /sys/board_properties/virtualkeys.touchyfeely

ملف خريطة المفاتيح الافتراضية يصف الإحداثيات ورموز مفاتيح Linux للمفاتيح الافتراضية على الشاشة التي تعمل باللمس.

بالإضافة إلى ملف خريطة المفتاح الافتراضي، يجب أن يكون هناك تنسيق مفتاح مطابق وملف خريطة الأحرف الرئيسية لتعيين رموز مفاتيح Linux برموز مفاتيح Android لتحديد نوع جهاز لوحة المفاتيح (عادةً SPECIAL_FUNCTION).

بناء الجملة

ملف خريطة المفتاح الافتراضي هو ملف نص عادي يتكون من سلسلة من المفاتيح الافتراضية أوصاف التخطيط إما مفصولة بسطور جديدة أو نقطتين.

تبدأ أسطر التعليقات بـ "#". ويستمر في النهاية حتى نهاية السطر.

يتم وصف كل مفتاح افتراضي بـ 6 مكوّنات مفصولة بنقطتين:

  • 0x01: رمز إصدار يجب أن تكون القيمة 0x01 دائمًا.
  • <Linux key code>": الرمز الأساسي للمفتاح الافتراضي في 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

في المثال أعلاه، دقة الشاشة التي تعمل باللمس تبلغ 480×800. وفقًا لذلك، المفاتيح الافتراضية تحتوي على <centerY> الإحداثي 835، وهو أقلّ بقليل المنطقة المرئية من الشاشة التي تعمل باللمس.

يتضمن المفتاح الأول رمز مسح ضوئي لنظام التشغيل Linux بقيمة 158 (KEY_BACK)، في منتصف س من 55، في الوسط Y من 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. لتفعيل هذه الميزة بشكل دائم، أضِف أمر sysrep المقابل في ملف init**rc الملف:

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

محتوى إضافي للقراءة