แอปสำหรับอุปกรณ์แบบพับได้และหลายหน้าจอ
โดยทั่วไป แอปไม่ควรใช้ตัวระบุแบบคงที่หรือตรรกะที่อาศัย รหัสดิสเพลย์บางรหัส ในกรณีส่วนใหญ่ แอปควรปรับขนาดและทำงานบนจอแสดงผลที่ต่างกัน และระบบควรควบคุมตำแหน่งที่จะค้นหาแอป ตัวอย่างเช่น ในการสร้าง ใหม่ที่ไม่เหมือนใครสำหรับอุปกรณ์แบบพับได้และเปิดตัวแอปพิเศษ หน้าจอภายนอกเมื่อพับอุปกรณ์
ในกรณีนี้ SystemUI (หรือคอมโพเนนต์ของระบบอื่น) ควรตรวจพบ พับ พิจารณาว่าเหมาะสมที่จะดำเนินการหรือไม่ แล้วเปิด กิจกรรมเป้าหมายและระบุรหัสการแสดงผลภายนอกเป็นเป้าหมายการเปิดตัว แอปไม่ควรตรวจพบการดำเนินการนี้หรือดำเนินการใดๆ ในการตอบกลับ ดำเนินการเปิดตัวบนจอแสดงผลที่เฉพาะเจาะจง อีกนัยหนึ่ง อย่าเดาว่า สิ่งที่ใช้งานได้บนอุปกรณ์หนึ่ง จะใช้กับอุปกรณ์อื่นๆ ได้ กล่าวสั้นๆ คือ เฉพาะอุปกรณ์ โค้ดช่วยเพิ่มการกระจาย Fragment
จำกัดการเข้าถึงจอแสดงผล
หากการกำหนดค่าอุปกรณ์ต้องมีการจำกัดการเข้าถึง
ขอแนะนำให้ใช้แฟล็ก Display#FLAG_PRIVATE
เพื่อกำหนดจอแสดงผลดังกล่าวเป็นแบบส่วนตัว ซึ่งจะเป็นการจำกัดทั้งหมดยกเว้น
ไม่ให้เพิ่มเนื้อหาไปยังจอแสดงผลได้ ความพยายามใดๆ ที่จะเปิดกิจกรรมหรือ
เพิ่มหน้าต่างโดยใครก็ได้ยกเว้นเจ้าของ จะทำให้เกิด SecurityException
หากระบบเป็นเจ้าของจอแสดงผล ระบบจะเพิ่มหน้าต่างและเปิดกิจกรรมได้
นอกจากนี้ เอนทิตีที่วางอยู่บนจอแสดงผลยังเข้าถึงจอแสดงผลนั้นได้เสมอด้วย หากเจ้าของเปิดกิจกรรมบนจอแสดงผล ก็จะเปิดกิจกรรมอื่นๆ ได้ กิจกรรมของคุณบนจอแสดงผลนี้ ด้วยเหตุนี้ เจ้าของจึงมีหน้าที่จำกัด เข้าถึงและอนุญาตแอปที่เชื่อถือได้เท่านั้น
นอกจากนี้ยังมีการเพิ่มข้อจำกัดให้กับจอแสดงผลเสมือนเนื่องจากทุกแอปสามารถ
สร้างโดยไม่แสดงต่อผู้ใช้ หากจอแสดงผลเสมือนไม่ได้
ระบบเป็นเจ้าของ เฉพาะกิจกรรมที่มี
allowEmbedded
ได้รับอนุญาต และผู้โทรควรมีรหัส ACTIVITY_EMBEDDING
สิทธิ์
โปรดดูข้อมูลเพิ่มเติมจากหัวข้อดังนี้
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
ActivityDisplay#isUidPresent()
DisplayManagerService#isUidPresentOnDisplay()
หากต้องการควบคุมการเปิดตัวกิจกรรมอย่างมีเงื่อนไข ให้ใช้ LaunchParamsController
ซึ่งจะสกัดกั้นการเรียกใช้กิจกรรมทั้งหมด
และช่วยให้คอมโพเนนต์ของระบบแก้ไข
พารามิเตอร์ที่ใช้ในการเปิดใช้งาน ฟีเจอร์นี้มีให้บริการในsystem_server
กำหนดการตั้งค่าหน้าต่างแสดงผลและการตกแต่งระบบ
การตกแต่งระบบ
ต่อการแสดงผล 1 จอใน DisplayWindowSettings
อุปกรณ์
สามารถกำหนดค่าเริ่มต้นได้ใน
/data/system/display_settings.xml
ค่านี้จะกำหนดว่าการตกแต่งระบบ (Launcher วอลเปเปอร์
แถบนำทาง และหน้าต่างตกแต่งอื่นๆ) และ IME จะปรากฏบนจอแสดงผล
โปรดดูรายละเอียดที่ DisplayWindowSettings#shouldShowSystemDecorsLocked()
และ DisplayWindowSettings#shouldShowImeLocked()
หากต้องการระบุจอแสดงผล ให้ใช้รหัสที่ไม่ซ้ำกัน (ค่าเริ่มต้นนี้จะใช้
DisplayInfo#uniqueId
) หรือรหัสพอร์ตจริงสำหรับฮาร์ดแวร์
จอแสดงผล (ดูDisplayInfo#address
)
ตัวอย่างเช่น ตัวอย่างการกำหนดค่าการแสดงผลต่อไปนี้เปิดใช้การตกแต่งระบบและ IME บนจอแสดงผลจำลอง:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="0" /> <display name="overlay:1" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
ในตัวอย่างด้านบน uniqueId
จะใช้สำหรับการระบุจอแสดงผล
ในแอตทริบิวต์ชื่อ ซึ่งสำหรับการแสดงผลจำลองคือ overlay:1
สำหรับจอแสดงผลในตัว ค่าตัวอย่างอาจเป็น "local:45354385242535243453"
อีกตัวเลือกหนึ่งคือการใช้ข้อมูลพอร์ตของฮาร์ดแวร์และตั้งค่า identifier="1"
ให้สอดคล้องกับ DisplayWindowSettings#IDENTIFIER_PORT
แล้วอัปเดต
เพื่อใช้รูปแบบ "port:<port_id>"
:
<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="1" /> <display name="port:12345" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
โปรดดูรายละเอียดที่หัวข้อตัวระบุโฆษณาแบบดิสเพลย์แบบคงที่
โปรดดูข้อมูลเพิ่มเติมจากหัวข้อดังนี้