يتم تحديد سلوك تشغيل النشاط من خلال أوضاع التشغيل في ملفات AndroidManifest.xml
للتطبيقات وعلامات الأهداف وActivityOptions التي يوفّرها المتصل. استخدِم ActivityOption#setLaunchDisplayId(int)
لاستهداف شاشة عرض معيّنة لتشغيل النشاط.
- يتم تلقائيًا تشغيل النشاط على الشاشة نفسها التي يتصل منها المستخدم. على سبيل المثال، يجب وضع مثيل جديد لنشاط تم بدؤه من المشغّل على الشاشة نفسها بدون علامات أو خيارات إضافية. احرص على استخدام السياق الصحيح (النشاط مقابل التطبيق) عند التشغيل.
- إذا تم التشغيل من مصدر غير مرتبط بشاشة عرض معيّنة (مثل shell أو سياق التطبيق)، يتم وضع النشاط على شاشة العرض العلوية التي تفاعل المستخدم معها آخر مرة على الجهاز أو التي تم تشغيل النشاط الأخير منها.
- يمكن تحويل الغرض من بدء نشاط إلى مثيل نشاط حالي في النظام. في هذه الحالة، إذا لم يتم تقديم أي علامات إضافية، سيظهر النشاط على الشاشة نفسها التي تم استخدامه عليها آخر مرة. إذا تم تحديد شاشة العرض المستهدَفة باستخدام
ActivityOptions#setTargetDisplayId()
، يتم نقل النشاط إلى شاشة العرض هذه (إذا سمحت القيود الأمنية وغيرها بذلك).
قيود الأمان
لمنع تطبيق ضار من إساءة استخدام المعلومات الحسّاسة الخاصة بالمستخدمين عن طريق قراءتها من سطح شاشة افتراضية أنشأها، يمكن للتطبيقات تشغيل أنشطتها فقط على شاشة افتراضية أنشأتها في نظام التشغيل Android 10. تجدر الإشارة إلى ما يلي:
- يمكن تشغيل مكونات النظام التي لديها إذن
INTERNAL_SYSTEM_WINDOW
على أي شاشة عرض. - يمكن للمتصلين الذين لديهم إذن
ACTIVITY_EMBEDDING
بدء الأنشطة من تطبيقات أخرى تتضمّن العلامةActivityInfo.FLAG_ALLOW_EMBEDDED
. - لا يُسمح بتشغيل الأنشطة على شاشات العرض الخاصة إلا للمالك أو الأنشطة المتوفّرة على شاشة العرض هذه.
وتنطبق قيود مشابهة على إضافة نوافذ إلى الشاشات.
يتضمّن نظام التشغيل Android 10 الطريقة
ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent)
للتحقّق من القيود الأمنية المفروضة على
التطبيق قبل محاولة تشغيله على شاشة عرض. في نظام التشغيل Android 9 (والإصدارات الأقدم)، تؤدي عمليات الإطلاق المقيدة إلى ظهور الخطأ SecurityException
.
يتم تطبيق معظم قيود الأمان في طريقة ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.