سياسة بدء النشاط

يتم تحديد سلوك تشغيل النشاط من خلال أوضاع التشغيل في ملفات 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().