تطبيقات للأجهزة القابلة للطي والمتعددة الشاشات
بشكل عام ، يجب ألا تعتمد التطبيقات على معرّفات ثابتة أو منطق يعتمد على بعض معرّفات العرض. في معظم الحالات ، يجب تغيير حجم التطبيقات والعمل على شاشات عرض مختلفة ويجب أن يتحكم النظام في مكان تحديد موقع التطبيقات. على سبيل المثال ، لبناء تجربة جديدة وفريدة من نوعها للأجهزة القابلة للطي وتشغيل تطبيق خاص على الشاشة الخارجية عند طي الجهاز.
في هذه الحالة ، يجب أن يكتشف 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>
للحصول على التفاصيل ، راجع معرّفات العرض الثابتة .
لمزيد من المعلومات، راجع: