الممارسات الموصى بها

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

في هذه الحالة ، يجب أن يكتشف 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>

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

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