המדיניות בנושא השקת פעילויות

התנהגות ההפעלה של פעילות מוגדרת על ידי מצבי הפעלה בקובצי 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().