سياسة إطلاق النشاط

يتم تحديد سلوك تشغيل النشاط من خلال أوضاع التشغيل في ملفات AndroidManifest.xml الخاصة بالتطبيقات، وعلامات الهدف، وخيارات النشاط التي يوفرها المتصل. استخدم 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() .