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