الممارسات المقترَحة

تطبيقات للأجهزة القابلة للطي والشاشات المتعددة

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

في هذه الحالة، يجب على SystemUI (أو مكون نظام آخر) اكتشاف الطية وتحديد ما إذا كان من المناسب تنفيذ إجراء ما، ثم تشغيل النشاط المستهدف وتحديد معرف العرض الخارجي كهدف الإطلاق. لا ينبغي أن تكتشف التطبيقات هذا الإجراء أو تنفذ أي إجراء ردًا على ذلك، ثم تقوم بتشغيله على شاشة معينة. بمعنى آخر، لا تفترض أن ما يعمل على جهاز واحد سيعمل على أجهزة أخرى. باختصار، تعمل التعليمات البرمجية الخاصة بالجهاز على زيادة التجزئة.

تقييد الوصول إلى شاشات العرض

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

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

بالإضافة إلى ذلك، تتم إضافة المزيد من القيود إلى شاشات العرض الافتراضية لأن أي تطبيق يمكنه إنشاء واحدة دون جعلها مرئية للمستخدم. إذا لم يكن العرض الظاهري مملوكًا للنظام، فسيتم السماح فقط بالأنشطة التي تحتوي على allowEmbedded ويجب أن يكون لدى المتصل إذن ACTIVITY_EMBEDDING .

لمزيد من المعلومات، راجع:

  • ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
  • ActivityDisplay#isUidPresent()
  • DisplayManagerService#isUidPresentOnDisplay()

للتحكم بشكل مشروط في عمليات إطلاق النشاط، استخدم LaunchParamsController ، الذي يعترض جميع عمليات إطلاق النشاط ويسمح لمكون النظام بتعديل المعلمات المستخدمة للإطلاق. هذا متاح في system_server .

تكوين إعدادات نافذة العرض وزخارف النظام

يمكن تكوين زخارف النظام لكل شاشة عرض في DisplayWindowSettings . يمكن أن يوفر تطبيق الجهاز تكوينًا افتراضيًا في /data/system/display_settings.xml .

تحدد هذه القيمة ما إذا كانت زخارف النظام (المشغل وورق الحائط وشريط التنقل ونوافذ الديكور الأخرى) ومحرر أسلوب الإدخال (IME) ستظهر على الشاشة. للحصول على التفاصيل، راجع DisplayWindowSettings#shouldShowSystemDecorsLocked() و DisplayWindowSettings#shouldShowImeLocked() .

للتعرف على شاشة العرض، استخدم إما معرفًا فريدًا (يستخدم هذا الإعداد الافتراضي DisplayInfo#uniqueId ) أو معرف منفذ فعلي لشاشات الأجهزة (راجع DisplayInfo#address ).

على سبيل المثال، يعمل مثال تكوين العرض التالي على تمكين زخارف النظام ومحرر أسلوب الإدخال (IME) على شاشة عرض تمت محاكاتها:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="0" />
<display
  name="overlay:1"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

في المثال أعلاه، يتم استخدام uniqueId لتعريف العرض في سمة الاسم، والتي تكون عبارة عن overlay:1 للعرض المحاكى. بالنسبة للشاشة المضمنة، قد تكون قيمة العينة "local:45354385242535243453" . هناك خيار آخر وهو استخدام معلومات منفذ الأجهزة وتعيين identifier="1" ليتوافق مع DisplayWindowSettings#IDENTIFIER_PORT ثم تحديث الاسم لاستخدام تنسيق "port:<port_id>" :

<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="1" />
<display
  name="port:12345"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

للحصول على التفاصيل، راجع معرفات العرض الثابتة .

لمزيد من المعلومات، راجع: