يتناول هذا المستند واجهات برمجة التطبيقات المختلفة الخاصة باللمس التفاعلي المتوفّرة في Android، ويشرح كيفية إنشاء تأثيرات لمس تفاعلي مختلفة وكيفية التحقّق من توافُق الجهاز اللازم. keywords_public: > Android, haptics, APIs, vibration, HapticFeedbackConstants, VibrationEffect, envelope haptics, haptic feedback, notification, amplitude control
يقدّم هذا القسم مقدمة عن واجهات برمجة التطبيقات المختلفة الخاصة باللمس التفاعلي المتوفّرة في Android. ويشمل أيضًا الحالات التي يجب فيها التحقّق من توفّر أي دعم للجهاز لضمان تشغيل التأثيرات اللمسية على النحو المطلوب.
هناك عدة طرق مختلفة لإنشاء تأثيرات لمسية، ومن المهم مراعاة مبادئ تصميم اللمسات على Android عند الاختيار من بينها. يلخّص الجدول التالي هذه السمات العالية المستوى لكل طريقة:
- تُعدّ إمكانية الاستخدام مهمة بشكل خاص عند التخطيط لآلية احتياطية للسلوك، ويجب دمجها مع التحقّق من توافق الجهاز الفردي.
- الاهتزازات الواضحة هي إحساسات دقيقة ونظيفة لا تزعج المستخدمين.
- تتسم ردود الفعل اللمسية الغنية بقدرة أكبر على التعبير، وغالبًا ما تتطلّب أجهزة مزوّدة بميزات أكثر.
| مساحة عرض واجهة برمجة التطبيقات | مدى التوفّر | تقنية اللمس الواضحة | تقنية اللمس الغني |
|---|---|---|---|
| HapticFeedbackConstants | Android 1.5 والإصدارات الأحدث (لكل ثابت) |
||
| Predefined VibrationEffect | Android 10 والإصدارات الأحدث | ||
VibrationEffect composition (الخيار المفضّل) |
Android 16 أو الإصدارات الأحدث (الربع الرابع من 2026) | ||
VibrationEffect تركيب العناصر الأساسية |
Android 11 والإصدارات الأحدث (لكل ثابت) | ||
| الاهتزازات عند التفعيل أو الإيقاف، والاهتزازات لمرة واحدة، والاهتزازات على شكل موجة | Android 1 |
بالإضافة إلى ذلك، تتيح لك واجهات برمجة التطبيقات للإشعارات، الموضّحة في هذه الصفحة، تخصيص التأثيرات الحسية التي يتم تشغيلها للإشعارات الواردة.
تتضمّن هذه الصفحة أيضًا وصفًا للمفاهيم الإضافية التي تشمل مساحات عرض واجهة برمجة التطبيقات:
- هل يحتوي الجهاز على جهاز اهتزاز؟
- تتيح التحكّم في السعة تأثيرات لمسية أكثر سلاسة وواقعية، ولكنها غير متاحة على جميع الأجهزة.
- تساعدك السمة
VibrationAttributes()في تصنيف الاهتزازات حسب الاستخدام، ما يضمن تطبيق إعدادات المستخدم المناسبة لتجنُّب مفاجأة المستخدم.
HapticFeedbackConstants
يوفّر الصف HapticFeedbackConstants ثوابت مستندة إلى الإجراءات للسماح للتطبيقات بإضافة تجاوب حسّي متسق في جميع تجارب الجهاز، بدلاً من أن يكون لكل تطبيق تأثيرات مختلفة للإجراءات الشائعة.
التوافق والمتطلبات
لا يتطلّب استخدام طريقة View.performHapticFeedback مع هذه الثوابت أي أذونات خاصة للتطبيق، بل يخضع للسمة View.hapticFeedbackEnabled التي تؤدي إلى إيقاف جميع طلبات التجاوب الحسّي في العرض، بما في ذلك الطلبات التلقائية، إذا تم ضبطها على false. الإعداد الأساسي ذو الصلة هو السمة View.hapticFeedbackEnabled التي تؤدي إلى إيقاف جميع طلبات التجاوب الحسّي في العرض، بما في ذلك الطلبات التلقائية، إذا تم ضبطها على false. تلتزم الطريقة أيضًا بإعدادات النظام التي يضبطها المستخدم لتفعيل ميزة "الملاحظات اللمسية".
الاعتبار الوحيد المتعلّق بالتوافق هو مستوى حزمة تطوير البرامج (SDK) للثابت المحدّد للإجراء.
لا حاجة إلى تقديم سلوك احتياطي عند استخدام
HapticFeedbackConstants.
استخدام HapticsFeedbackConstants
لمزيد من التفاصيل حول استخدام HapticFeedbackConstants، يُرجى الاطّلاع على إضافة تجاوب حسّي إلى الأحداث.
VibrationEffect محدَّدة مسبقًا
يوفّر صف VibrationEffect العديد من الثوابت المحدّدة مسبقًا، مثل CLICK وTICK وDOUBLE_CLICK. قد تكون هذه المؤثرات محسّنة للجهاز.
التوافق والمتطلبات
يتطلّب تشغيل أي VibrationEffect الحصول على إذن VIBRATE في ملف بيان التطبيق.
لا حاجة إلى توفير سلوك احتياطي عند استخدام VibrationEffect المحدّدة مسبقًا، لأنّ الثوابت التي لا تتضمّن تنفيذًا محسّنًا للأجهزة تعود إلى سلوك احتياطي عادي على المنصّة.
تُستخدَم واجهتا برمجة التطبيقات Vibrator.areEffectsSupported وVibrator.areAllEffectsSupported
لتحديد ما إذا كان هناك تنفيذ محسّن للجهاز.
سيظل بإمكانك استخدام التأثيرات المحدّدة مسبقًا بدون تنفيذ محسّن، وسيتم استخدام الإعدادات الاحتياطية العادية للمنصة. وبالتالي، لا تكون واجهات برمجة التطبيقات
areEffectsSupported هذه مطلوبة إلا إذا كان التطبيق يريد مراعاة
ما إذا كان التأثير محسّنًا للجهاز أم لا.
يمكن أن تعرض طرق التحقّق من التأثير إحدى القيم الثلاث التالية:
- يشير
VIBRATION_EFFECT_SUPPORT_YESإلى أنّ الجهاز يوفّر دعمًا محسّنًا لهذا التأثير. - يشير
VIBRATION_EFFECT_SUPPORT_NOإلى أنّ الجهاز لا يتوافق مع ميزة "التحسين"، ولكنّه لا يزال يستخدم المنصة الاحتياطية. - يشير
VIBRATION_EFFECT_SUPPORT_UNKNOWNإلى أنّ النظام لا يعرف ما إذا كان التنفيذ محسّنًا أم لا.
بما أنّ القيمة UNKNOWN تشير إلى أنّ واجهة برمجة التطبيقات الخاصة بالتحقّق غير متاحة، يتم عرضها عادةً لجميع التأثيرات أو لا يتم عرضها لأي منها. تعود هذه الأجهزة إلى الإصدار السابق بشكلٍ ديناميكي.
استخدام VibrationEffect المحدَّدة مسبقًا
لمزيد من التفاصيل حول استخدام VibrationEffect محدَّد مسبقًا، يُرجى الاطّلاع على
استخدام VibrationEffect محدَّد مسبقًا لإنشاء
ملاحظات لمسية.
Envelope VibrationEffect
تتيح الاهتزازات المستندة إلى الغلاف التحكّم بدقة في سعة الاهتزاز وتردده بمرور الوقت من خلال تحديد سلسلة من نقاط التحكّم. يتيح ذلك للمطوّرين تصميم تجارب تجاوب حسّي أكثر ثراءً ودقة. ويمكن إنشاء هذه الاهتزازات باستخدام الفئتَين BasicEnvelopeBuilder وWaveformEnvelopeBuilder.
التوافق والمتطلبات
لتشغيل أي مؤثرات اهتزاز، يجب أن يوضّح تطبيقك الإذن VIBRATE في بيان التطبيق.
للتأكّد من توفّر مؤثرات الظرف، اتّصِل بالرقم
Vibrator.areEnvelopeEffectsSupported().
أداة إنشاء مغلفات أساسية
لإنشاء تجربة لمسية سلسة، يجب أن تبدأ تأثيرات الغلاف وتنتهي بشدة مقدارها \( 0.0 \). تفرض واجهة برمجة التطبيقات ذلك من خلال ضبط مستوى جهد البداية على صفر، وتُصدر استثناءً إذا لم يكن مستوى جهد النهاية صفرًا. يمنع هذا القيد حدوث تأثيرات ديناميكية غير مرغوب فيها في الاهتزازات بسبب حالات عدم الاستمرارية في السعة التي يمكن أن تؤثر سلبًا في إدراك المستخدم للمس.
لتوفير عرض متسق لتأثيرات التضمين على جميع الأجهزة، يتطلّب إطار العمل أن تتمكّن الأجهزة المتوافقة مع هذه الميزة من التعامل مع مدة لا تقل عن 20 مللي ثانية بين نقاط التحكّم و16 نقطة على الأقل لتأثيرات التضمين.
أداة إنشاء مغلف الشكل الموجي
لا يعدّل إطار العمل قيمتَي التردد والسعة المطلوبتَين اللتَين يقدّمهما المطوّر. ومع ذلك، تعمل واجهة برمجة التطبيقات أيضًا على تثبيت سعة الموجة الصوتية عند الصفر لإنشاء انتقالات سلسة.
لمساعدتك في تحسين تأثيرات مغلف الموجة الصوتية في تطبيقك وتوفير التوافق مع جميع الأجهزة، يوفّر نظام التشغيل Android واجهات برمجة تطبيقات للاستعلام عن إمكانات الأجهزة المهمة. توفّر هذه الطرق معلومات حول قيود الجهاز، مثل الحد الأقصى والأدنى لمدة الانتقال بين نقاط التحكّم والحد الأقصى لعدد نقاط التحكّم المتاحة لتأثير واحد:
getMaxSize()- تعرض هذه السمة الحد الأقصى لعدد نقاط التحكّم المتاحة لتأثير المغلف.
getMinControlPointDurationMillis()- تعرض هذه السمة الحد الأدنى للمدة المتاحة بالملّي ثانية بين نقطتَي تحكّم ضمن تأثير التضمين.
getMaxControlPointDurationMillis()- تعرض هذه السمة الحد الأقصى للمدة المسموح بها بالمللي ثانية بين نقطتَي تحكّم ضمن تأثير التضمين.
getMaxDurationMillis()- يستردّ هذا الإجراء الحد الأقصى لمدة تأثير الغلاف، بالمللي ثانية.
إذا تجاوز أحد التأثيرات قيود الجهاز، مثل السماح بعدد كبير جدًا من نقاط التحكّم أو مدة تتجاوز الحد الأقصى، يعدّل إطار العمل التأثير تلقائيًا ليتناسب مع الحدود المسموح بها. وتحاول عملية التعديل هذه الحفاظ على الغرض الأصلي للتصميم وإحساسه قدر الإمكان.
استخدام Envelope VibrationEffects
للحصول على تفاصيل حول إنشاء تأثيرات شكل الموجة المغلفة، يُرجى الاطّلاع على إنشاء شكل موجة اهتزاز مع مغلفات.
VibrationEffect مقطوعة
اعتبارًا من Android 16 (الربع الرابع من 2026)، ستكون واجهة برمجة التطبيقات VibrationEffect.Builder هي واجهة برمجة التطبيقات المفضّلة لإنشاء تأثيرات لمسية غنية ومعبّرة من خلال ترتيب عناصر لمسية متعددة على طول خط زمني مصمَّم. يحلّ هذا التنسيق محل
VibrationEffect.Composition من خلال
توفير جدولة مستندة إلى المخطط الزمني، وتغليف ذري، وتوافق مع الأحداث المختلطة
(التي تجمع بين الإعدادات المسبقة والمغلفات)، وإمكانية الرجوع التلقائي المضمّنة.
الوحدات الأساسية
تتيح لك "أداة الإنشاء" ترتيب عناصر اللمس التالية:
-
VibrationEffect.Preset: أحاسيس لمسية محدّدة مسبقًا تمثّل نبضات قصيرة شائعة، مثلPRESET_CLICKوPRESET_TICKوPRESET_LOW_TICK. تحلّ الإعدادات المُسبقة محلّ العناصر الأساسية القصيرة من واجهة برمجة التطبيقاتVibrationEffect.Composition. بالنسبة إلى المؤثرات الأطول أو المستمرة أو المتزايدة (التي كانت تتم معالجتها سابقًا باستخدام الارتفاع والانخفاض وغيرها من العناصر الأساسية)، استخدِم المغلفات (PWLE) بدلاً من ذلك. يمكن تغيير حجم الإعدادات المُسبَقة من0.0fإلى1.0fباستخدامPreset.create(presetId, scale). VibrationEffect.Envelope: مغلفات خطية متقطعة (PWLE) تم إنشاؤها باستخدامBasicEnvelopeBuilder(مع الشدة والحدة) أوWaveformEnvelopeBuilder(مع التردد والسعة). يتم إنشاء الحزم باستخدامEnvelope.create(builder).VibrationEffect.Event: أحداث المخطط الزمني التي تم استردادها منVibrationEffectحالي باستخدامgetEvents(). يمكن إضافة هذه الإعلانات مع إزاحة المخطط الزمني باستخدامaddEvents(startTimeShiftMillis, events).
جدولة المخطط الزمني والتحقّق منه
تتم إضافة كل عنصر إلى أداة الإنشاء باستخدام startTimeMillis التي تمثّل الإزاحة الزمنية (بالملي ثانية) من بداية المقطوعة الموسيقية:
- التحقّق من الصحة في وقت الإنشاء: يجب إضافة العناصر بترتيب تصاعدي صارم لأوقات البدء. تُجري أداة الإنشاء عملية التحقّق بأفضل جهد ممكن في مدّة التصميم من خلال التحقّق من الحد الأدنى للمدة (مثل 1 مللي ثانية للإعدادات المسبقة أو المدد المعروفة للحزم). في حال رصد تداخل في مدّة التصميم، يتم عرض
IllegalArgumentException. - مزامنة توقيت التشغيل: يوفّر إطار العمل أفضل دعم ممكن للتوقيت أثناء التشغيل. إذا كان حدث سابق لا يزال قيد التنفيذ عند حلول وقت بدء الحدث التالي المُجدوَل، سيغيّر إطار العمل تلقائيًا موعد الحدث اللاحق إلى أقرب وقت متاح. يؤدي ذلك إلى منع تداخل الأحداث في التشغيل الفعلي مع ضمان عدم حذف أي أحداث حسية.
تكرار التأثيرات
يمكن إضافة تأثير متكرّر إلى التركيبة باستخدام setRepeatingEffect(startTimeMillis, repeatingEffect, durationMillis). بعد ضبط تأثير متكرّر، لا يمكن إضافة عناصر أخرى إلى أداة الإنشاء.
دعم الإجراء الاحتياطي
يتم تفعيل إمكانية الرجوع التلقائي على مستوى إطار العمل تلقائيًا للاهتزاز
الذي تم إنشاؤه بواسطة VibrationEffect.Builder:
- الرجوع إلى المنصة الشفافة: إذا كان الجهاز لا يتوافق مع
PresetأوEnvelopeالأساسي المطلوب، يستبدل إطار العمل تلقائيًا العنصر غير المتوافق باهتزاز مناسب ومتوافق في وقت التشغيل بأقصى جهد ممكن. لا يحتاج تطبيقك إلى التحقّق يدويًا من إمكانات الجهاز (مثلisPresetSupported) قبل تشغيل المقطوعات الموسيقية التي تم إنشاؤها باستخدامVibrationEffect.Builder. - استثناء
WaveformEnvelopeBuilder: لا تتوافق تأثيرات المغلف التي تم إنشاؤها بواسطةWaveformEnvelopeBuilder(التي تحدد الترددات الفيزيائية المطلقة بالهرتز والسعات بوحدة G) مع ميزة التوافق التلقائي. بما أنّ تأثيرات PWLE المتقدّمة تعتمد على منحنيات تردد معدّات معيّنة (FOAM)، سيؤدي استبدالها تلقائيًا إلى الإخلال بالغرض من التصميم. إذا كان الجهاز لا يتوافق مع تأثيرات PWLE أو الترددات المطلوبة، لن يتم تشغيل هذه الاهتزازات. لضمان التوافق مع جميع الأجهزة، ننصحك باستخدامBasicEnvelopeBuilder.
استخدام VibrationEffect.Builder
للاطّلاع على أمثلة على الرموز البرمجية الخاصة بإنشاء تأثيرات باستخدام VibrationEffect.Builder، راجِع مقالة
إنشاء تركيبات مرتبطة بالمخطط الزمني باستخدام
VibrationEffect.Builder.
VibrationEffect تركيب العناصر الأساسية
تركيبة VibrationEffect هي تأثير اهتزاز تم إنشاؤه باستخدام واجهة برمجة التطبيقات VibrationEffect.startComposition. تتيح لك واجهة برمجة التطبيقات هذه إنشاء تسلسل من العناصر الأساسية.
التوافق والمتطلبات
يتطلّب تشغيل أي VibrationEffect الحصول على إذن VIBRATE في ملف بيان التطبيق.
التحقّق من توفّر أنواع البيانات الأساسية
لذلك، عند استخدام واجهة برمجة التطبيقات VibrationEffect.Composition، عليك التحقّق من إمكانية استخدام كل عنصر أساسي على حدة باستخدام Vibrator.arePrimitivesSupported أو Vibrator.areAllPrimitivesSupported قبل التشغيل.
يمكن استرداد معلومات حول دعم كل نوع من أنواع البيانات الأساسية باستخدام طريقة
Vibrator.arePrimitivesSupported. بدلاً من ذلك، يمكن التحقّق من مجموعة من العناصر الأساسية معًا باستخدام الطريقة Vibrator.areAllPrimitivesSupported، وهذا يعادل استخدام AND مع كل عنصر أساسي.
استخدام تركيبات العناصر الأساسية VibrationEffect
للاطّلاع على تفاصيل حول استخدام تركيبات عناصر VibrationEffect الأساسية، يُرجى الرجوع إلى إنشاء تركيبات عناصر أساسية للاهتزاز.
الاهتزازات المتواصلة والمتقطّعة والموجية
أقدم شكل من أشكال الاهتزاز المتوافق مع Android هو أنماط بسيطة لتشغيل وإيقاف الاهتزاز مع مدد زمنية قابلة للضبط. لا تتوافق واجهات برمجة التطبيقات هذه عادةً مع مبادئ تصميم اللمسات لأنّها يمكن أن تنشئ لمسات رنانة، لذا تجنَّب استخدامها إلا كحلّ أخير.
تتمثّل حالة الاستخدام الأكثر شيوعًا للاهتزازات المتناوبة في الإشعارات، حيث يكون الاهتزاز مطلوبًا في جميع الحالات. تتيح الاهتزازات الموجية أيضًا تكرار نمط إلى أجل غير مسمّى، كما تتوقّع بالنسبة إلى نغمة رنين.
يشير النمط ذو الطلقة الواحدة إلى الاهتزاز مرة واحدة لمدة N ملي ثانية.
هناك نوعان من أنماط الموجة الصوتية:
- التوقيتات فقط: هذا النوع من أشكال الموجات هو وصف للمدّة الزمنية التي يكون فيها الجهاز مطفأً والمدّة الزمنية التي يكون فيها الجهاز مضاءً. تبدأ التوقيتات بمدة الإيقاف، وبالتالي، غالبًا ما تبدأ أنماط الموجات بقيمة صفر للإشارة إلى بدء الاهتزاز على الفور.
- التوقيتات والسعات يحتوي هذا النوع من أشكال الموجات على مجموعة إضافية من السعات لتتطابق مع كل رقم توقيت، بدلاً من التشغيل والإيقاف الضمنيَّين في الشكل الأول. ومع ذلك، من المهم التأكّد من أنّ الجهاز يتيح التحكّم في السعة لضمان إمكانية تحقيق التوسيع المطلوب.
التوافق والمتطلبات
بما أنّ الاهتزازات المتواصلة هي أقدم أشكال الاهتزازات، فهي متاحة على جميع الأجهزة التي تتضمّن جهاز اهتزاز، كما هو موضّح لاحقًا في هذه الصفحة.
يتطلّب تشغيل أي من استدعاءات VibrationEffect أو استدعاءات vibrate القديمة الحصول على إذن VIBRATE في ملف بيان التطبيق.
عند استخدام قيم مختلفة للسعة في شكل موجي، ننصحك بشدة بالتأكّد من أنّ الجهاز يتيح التحكّم في السعة.
التحقّق من توفّر ميزة التحكّم في السعة
يتم تقريب قيم السعة غير الصفرية إلى% 100 على الأجهزة التي لا تتضمّن ميزة التحكّم في السعة، لذا من المهم التحقّق من توفّر هذه الميزة باستخدام Vibrator.hasAmplitudeControl. لمزيد من التفاصيل، يُرجى الاطّلاع على التحكّم في مستوى الصوت.
عليك التفكير مليًا في ما إذا كان التأثير يتمتّع بجودة كافية بدون التحكّم في السعة. قد يكون من الأفضل الرجوع إلى اهتزاز مصمَّم بشكل صريح للتشغيل والإيقاف.
استخدام الاهتزازات المتواصلة
في مستويات حزمة تطوير البرامج (SDK) الأحدث، تم دمج جميع أوضاع الاهتزاز في فئة VibrationEffect واحدة، حيث يتم إنشاء عمليات الاهتزاز البسيطة هذه باستخدام VibrationEffect.createOneShot أو VibrationEffect.createWaveform.
واجهات برمجة التطبيقات للإشعارات
عند تخصيص إشعارات تطبيقك، يمكنك استخدام إحدى واجهات برمجة التطبيقات التالية لربط نمط بكل قناة إشعارات:
- AndroidX
- Android
تتّبع جميع هذه النماذج نمط موجة أساسي للتشغيل والإيقاف، كما هو موضّح سابقًا، حيث يكون الإدخال الأول هو مدة التأخير قبل تشغيل المُهتز.
المفاهيم العامة
تنطبق العديد من المفاهيم على مساحات عرض واجهة برمجة التطبيقات الموضّحة أعلاه.
هل يحتوي الجهاز على جهاز اهتزاز؟
يمكنك الحصول على فئة Vibrator غير فارغة من context.getSystemService(Vibrator.class). إذا لم يكن الجهاز مزوّدًا بمحرك اهتزاز، لن يكون لاستدعاء واجهات برمجة التطبيقات الخاصة بالاهتزاز أي تأثير، وبالتالي لن تحتاج التطبيقات إلى حصر جميع وظائف اللمس المشروط. ومع ذلك، إذا لزم الأمر، يمكن لتطبيق استدعاء hasVibrator() لتحديد ما إذا كان هذا الجهاز هو جهاز اهتزاز حقيقي (true) أو رمز بديل (false).
هل أوقف المستخدم الاهتزازات اللمسية؟
قد تتطلّب بعض عمليات التنفيذ المخصّصة التحقّق يدويًا مما إذا كان المستخدم قد أوقف إعداد ملاحظات اللمس في Android بالكامل، وفي هذه الحالة يجب إيقاف تأثيرات ملاحظات اللمس. يمكن طلب معلومات عن هذا الإعداد باستخدام المفتاح HAPTIC_FEEDBACK_ENABLED، حيث تشير القيمة صفر إلى أنّ الإعداد غير مفعّل.
سمات الاهتزاز
يمكن تقديم سمات الاهتزاز (حاليًا في شكل AudioAttributes) للمساعدة في إعلام النظام بغرض الاهتزاز. ويكون هذا الإذن مطلوبًا عند بدء اهتزاز عندما يكون تطبيقك يعمل في الخلفية، لأنّ الاهتزازات التي تتطلّب الانتباه فقط هي المتاحة للاستخدام في الخلفية.
يتم تناول عملية إنشاء AudioAttributes في مستندات الفئة، ويجب اعتبارها اهتزازًا بدلاً من صوت.
كإرشادات، يكون نوع المحتوى في معظم الحالات CONTENT_TYPE_SONIFICATION، وقد تكون الاستخدامات قيمًا مثل USAGE_ASSISTANCE_SONIFICATION للحصول على ملاحظات باللمس في المقدّمة، أو USAGE_ALARM للتنبيه في الخلفية. لا تؤثّر إشارات الصوت في الاهتزازات.
التحكّم في السعة
إذا كان جهاز الاهتزاز يتيح التحكّم في السعة، يمكنه تشغيل اهتزازات بدرجات شدة مختلفة. وهذه إمكانية مهمة لإنتاج اهتزازات غنية، فضلاً عن إمكانية السماح للمستخدم بالتحكّم في مستويات شدة الاهتزاز التلقائية.
يمكن التحقّق من إمكانية التحكّم في السعة من خلال طلب
Vibrator.hasAmplitudeControl. إذا كان جهاز الاهتزاز لا يتوافق مع مستوى الصوت، سيتم ربط جميع قيم مستوى الصوت بحالة إيقاف أو تشغيل استنادًا إلى ما إذا كانت القيمة صفرًا أو غير صفر. وبالتالي، يجب على التطبيقات التي تستخدم ردود فعل لمسية غنية بمستويات مختلفة من الشدة إيقافها إذا كان الجهاز لا يتضمّن إمكانية التحكّم في الشدة.
إتاحة تأثيرات المغلف
تتيح المحركات التي تعمل بالاهتزاز مع تأثيرات الغلاف إنشاء اهتزازات أكثر ديناميكية ودقة، ما يوفّر تحكّمًا أكثر دقة في الشدة والحدة للحصول على تجارب لمسية أكثر ثراءً. استخدِم
Vibration.areEnvelopeEffectsSupported لتحديد ما إذا كان جهازك
يتوافق مع هذه الميزة. وفي حال عدم توفّرها، سيتم تجاهل الاهتزازات المستندة إلى المغلف.