يتم تحديد سلوك تشغيل النشاط من خلال أوضاع التشغيل فيملفّات
AndroidManifest.xml
للتطبيقات وعلامات النية وActivityOptions
التي يقدّمها المُرسِل. استخدِم ActivityOption#setLaunchDisplayId(int)
لتحديد شاشة معيّنة لإطلاق النشاط.
- ويتم تلقائيًا تشغيل النشاط على الشاشة نفسها التي يعمل فيها المتصل. على سبيل المثال، يجب أن يتم وضع نسخة جديدة من نشاط تم تشغيله من مشغّل التطبيقات على الشاشة نفسها بدون إشارات أو خيارات إضافية. احرص على استخدام السياق الصحيح (النشاط مقابل التطبيق) لبدء التشغيل.
- إذا تمّ الإطلاق من مصدر غير مرتبط بشاشة معيّنة (مثل بدء تشغيل من سياق التطبيق أو من واجهة مستخدِم)، يتمّ وضع النشاط على الشاشة العلوية التي تفاعل معها المستخدِم مع الجهاز آخر مرة أو التي تمّ إطلاق النشاط الأخير منها.
- يمكن حلّ نية بدء نشاط إلى مثيل نشاط
حالي في النظام. في هذه الحالة، إذا لم يتم تقديم أي إشارات إضافية، يظهر
نشاط على الشاشة نفسها التي تم استخدامه فيها آخر مرة. إذا تم تحديد الشاشة المستهدفة
باستخدام
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()
.