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

ลักษณะการเริ่มกิจกรรมจะกำหนดโดยโหมดการเริ่มในไฟล์ 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()