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

ลักษณะการเปิดตัวกิจกรรมกำหนดโดยโหมดการเปิดตัวในไฟล์ AndroidManifest.xmlของแอป แฟล็ก 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()