ลักษณะการเริ่มกิจกรรมจะกำหนดโดยโหมดการเริ่มในไฟล์ AndroidManifest.xml
ของแอป Flag Intent และ ActivityOptions ที่ระบุโดยผู้เรียก ใช้ ActivityOption#setLaunchDisplayId(int)
เพื่อกําหนดเป้าหมายการแสดงผลที่เฉพาะเจาะจงสําหรับการเริ่มกิจกรรม
- โดยค่าเริ่มต้น กิจกรรมจะเปิดขึ้นในจอแสดงผลเดียวกับที่เรียกใช้ เช่น อินสแตนซ์ใหม่ของกิจกรรมที่เริ่มต้นจากตัวเปิดควรวางไว้ในจอแสดงผลเดียวกันโดยไม่มี Flag หรือตัวเลือกเพิ่มเติม ตรวจสอบว่าคุณใช้บริบทที่ถูกต้อง (กิจกรรมเทียบกับแอปพลิเคชัน) สำหรับการเปิดตัว
- หากการเริ่มทํางานมาจากแหล่งที่มาที่ไม่ได้เชื่อมโยงกับจอแสดงผลที่เฉพาะเจาะจง (เช่น จากเชลล์หรือบริบทแอปพลิเคชัน) ระบบจะวางกิจกรรมไว้บนจอแสดงผลด้านบนซึ่งผู้ใช้โต้ตอบกับอุปกรณ์ครั้งล่าสุดหรือเป็นจอที่เริ่มกิจกรรมครั้งล่าสุด
- เจตนาในการเปิดใช้งานกิจกรรมสามารถแก้ไขเป็นอินสแตนซ์กิจกรรมที่มีอยู่ของระบบ ในกรณีดังกล่าว หากไม่มีการแจ้งเพิ่มเติม กิจกรรมจะแสดงบนจอแสดงผลเดียวกับที่มีการใช้งานครั้งล่าสุด หากระบุจอแสดงผลเป้าหมายด้วย
ActivityOptions#setTargetDisplayId()
ระบบจะย้ายกิจกรรมไปยังจอแสดงผลนั้น (หากความปลอดภัยและข้อจํากัดอื่นๆ อนุญาต)
ข้อจำกัดด้านความปลอดภัย
แอปสามารถเปิดกิจกรรมของตนเองได้เท่านั้นในจอแสดงผลเสมือนจริงที่สร้างขึ้นเองใน Android 10 เพื่อป้องกันไม่ให้แอปที่เป็นอันตรายใช้ข้อมูลที่มีความละเอียดอ่อนของผู้ใช้ในทางที่ผิดด้วยการอ่านข้อมูลจากพื้นผิวของจอแสดงผลเสมือนจริงที่สร้างขึ้น แต่โปรดทราบว่า
- คอมโพเนนต์ของระบบที่มีสิทธิ์
INTERNAL_SYSTEM_WINDOW
จะเปิดบนจอแสดงผลใดก็ได้ - ผู้โทรที่มีสิทธิ์
ACTIVITY_EMBEDDING
จะเปิดกิจกรรมจากแอปอื่นๆ ที่มี FlagActivityInfo.FLAG_ALLOW_EMBEDDED
ได้ - อนุญาตให้เจ้าของหรือกิจกรรมที่แสดงบนจอแสดงผลนั้นเท่านั้นที่เปิดใช้งานกิจกรรมบนจอแสดงผลส่วนตัวได้
ข้อจํากัดที่คล้ายกันนี้มีผลกับการเพิ่มหน้าต่างในจอแสดงผล
Android 10 มีวิธี ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent)
เพื่อตรวจสอบข้อจำกัดด้านความปลอดภัยของแอปก่อนที่จะพยายามเปิดบนจอแสดงผล ใน Android 9
(และต่ำกว่า) ผลการเปิดตัวที่จำกัดจะแสดง SecurityException
ข้อจำกัดด้านความปลอดภัยส่วนใหญ่จะใช้ในเมธอด ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()