عملکرد راهاندازی فعالیت با حالتهای راهاندازی در فایلهای
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() اعمال میشود.