นโยบายการเปิดตัวกิจกรรม

ลักษณะการเริ่มกิจกรรมจะกำหนดโดยโหมดการเริ่มในไฟล์ AndroidManifest.xml ของแอป Flag Intent และ ActivityOptions ที่ระบุโดยผู้เรียก ใช้ ActivityOption#setLaunchDisplayId(int) เพื่อกําหนดเป้าหมายการแสดงผลที่เฉพาะเจาะจงสําหรับการเริ่มกิจกรรม

  • โดยค่าเริ่มต้น กิจกรรมจะเปิดขึ้นในจอแสดงผลเดียวกับที่เรียกใช้ เช่น ควรวางอินสแตนซ์ใหม่ของกิจกรรมที่เริ่มต้นจากตัวเปิดแอปในการแสดงผลเดียวกันโดยไม่มี Flag หรือตัวเลือกเพิ่มเติม ตรวจสอบว่าคุณใช้บริบทที่ถูกต้อง (กิจกรรมเทียบกับแอปพลิเคชัน) สำหรับการเปิดตัว
  • หากการเริ่มทํางานมาจากแหล่งที่มาที่ไม่ได้เชื่อมโยงกับจอแสดงผลที่เฉพาะเจาะจง (เช่น จากเชลล์หรือบริบทแอปพลิเคชัน) ระบบจะวางกิจกรรมไว้บนจอแสดงผลด้านบนซึ่งผู้ใช้โต้ตอบกับอุปกรณ์ครั้งล่าสุดหรือเป็นจอที่เริ่มกิจกรรมครั้งล่าสุด
  • เจตนาในการเปิดใช้งานกิจกรรมสามารถแก้ไขเป็นอินสแตนซ์กิจกรรมที่มีอยู่ของระบบ ในกรณีดังกล่าว หากไม่มีการแจ้งว่าต้องดำเนินการเพิ่มเติม กิจกรรมจะปรากฏบนจอแสดงผลเดียวกับที่ใช้ครั้งล่าสุด หากระบุจอแสดงผลเป้าหมายด้วย ActivityOptions#setTargetDisplayId() ระบบจะย้ายกิจกรรมไปยังจอแสดงผลนั้น (หากความปลอดภัยและข้อจํากัดอื่นๆ อนุญาต)

ข้อจำกัดด้านความปลอดภัย

แอปสามารถเปิดกิจกรรมของตนเองได้เท่านั้นในจอแสดงผลเสมือนจริงที่สร้างขึ้นเองใน Android 10 เพื่อป้องกันไม่ให้แอปที่เป็นอันตรายนำข้อมูลที่ละเอียดอ่อนของผู้ใช้ไปใช้ในทางที่ผิดด้วยการอ่านข้อมูลจากพื้นผิวของจอแสดงผลเสมือนจริงที่สร้างขึ้น แต่โปรดทราบว่า

  • คอมโพเนนต์ของระบบที่มีสิทธิ์ INTERNAL_SYSTEM_WINDOW จะเปิดบนจอแสดงผลใดก็ได้
  • ผู้เรียกที่มีสิทธิ์ ACTIVITY_EMBEDDING จะเปิดกิจกรรมจากแอปอื่นๆ ที่มี Flag ActivityInfo.FLAG_ALLOW_EMBEDDED ได้
  • อนุญาตให้เจ้าของหรือกิจกรรมที่แสดงบนจอแสดงผลนั้นเท่านั้นที่เปิดใช้งานกิจกรรมบนจอแสดงผลส่วนตัวได้

ข้อจํากัดที่คล้ายกันนี้มีผลกับการเพิ่มหน้าต่างในจอแสดงผล

Android 10 มีวิธี ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) เพื่อตรวจสอบข้อจำกัดด้านความปลอดภัยของแอปก่อนที่จะพยายามเปิดบนจอแสดงผล ใน Android 9 (และต่ำกว่า) ผลลัพธ์ของการเปิดตัวที่ถูกจํากัดจะแสดง SecurityException

ข้อจำกัดด้านความปลอดภัยส่วนใหญ่จะมีผลกับวิธี ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()